비디오: Getting Started with the Firebase Realtime Database on the Web, Part 1 - Firecasts 2024
JavaScript 객체 표기법 (JSON)은 iOS 앱의 데이터 표현 측면에서 사실상 표준이되었습니다. JSON을 사용하여 웹에서 데이터를 전송하고 수명이 긴 데이터를 저장 및 검색하는 형식으로 사용할 수 있습니다. JSON은 사람이 읽을 수 있고 기계가 이해하기 쉽습니다. JSON의 데이터는 두 가지 구조 중 하나가 될 수 있습니다. 정렬되지 않은 이름 - 값 쌍 집합을 포함하는 객체입니다. 각 name-value는 객체의 속성에 해당합니다. 속성이 계층 적으로 표현되는 경우 각 이름 - 값 쌍을 중첩 할 수 있습니다.
-
-
Tic-Tac-Toe에서 JSON은 게임의 상태를 나타냅니다. 이 상태는 다음과 같이 구성됩니다.
현재 플레이어 (플레이어 1 또는 플레이어 2)는 정수로 표시됩니다 (플레이어 1의 경우 0, 플레이어 2의 경우 1).
-
게임의 상태 - 그것이 활성이든 완료이든 상관없이; 그것이 완료 되었든, 그것이이기 든 당겨 졌든간에; 그리고 원하면 누구에 의해.
-
그리드의 상태 - 즉, 어떤 심볼 그리드의 각 사각형에 나타납니다. 기호는 각각 공백, X 및 O를 나타내는 정수 값 0, 1 및 2로 표시됩니다.
현재 기호 (다음 이동시에 재생 될 기호). 여기에서 (그리고 예제를 변경하기 위해) 기호를 문자열 "X"또는 문자열 "O"또는 공백 ("")으로 나타냅니다.
-
-
재생 횟수 (게임의 현재 지점으로 이동 한 횟수)는 정수로 표시됩니다.
이 코드에서는 활성 Tic-Tac-Toe 게임에 해당하는 JSON 객체를 보여줍니다. -
{ "TTTGameKeyCurrentPlayer": 0, "TTTGameKeyState": 0, "TTTGameKeyGridState": "2, 1, 2 JSON은 배열, 구조체 및 객체와 같은 사용 가능한 데이터 구조에 쉽게 매핑됩니다. ","TTTGameKeyCurrentSymbol ":"X ","TTTGameKeyPlaycount ": 8} 거의 모든 프로그래밍 언어. JSON의 객체 형식은 프로그래밍 언어 객체 또는 구조체에 쉽게 매핑되는 반면 JSON의 배열 형식은 배열, 벡터, 목록 또는 시퀀스에 매핑 될 수 있습니다. 기본적으로 객체의 정렬 된 컬렉션을 보유 할 수있는 데이터 구조가 무엇이든간에. Tic-Tac-Toe에서는 NSDictionary 객체가 중첩 된 이름 값 쌍으로 구성되기 때문에 게임 상태에 해당하는 JSON 객체가 NSDictionary에 매핑됩니다.결과적으로 게임의 상태를 저장해야하는 경우 상태를 NSDictionary 객체로 가져온 다음 JSON 문자열로 변환합니다.
게임 상태를 가져올 때 JSON 데이터를 읽고 NSDictionary 개체로 변환 한 다음 NSDictionary를 사용하여 저장된 상태로 게임을 복원합니다.
다음 예제에서는 사전 세션 객체에서 JSON으로, JSON 데이터 객체에서 문자열로 변환하는 방법을 보여줍니다 (Game 세션보기 컨트롤러 - 파일 TTTGameSessionViewController. m 및.h의 saveGame 메소드에서).
- (IBAction) saveGame: (id) sender {NSDictionary * savedGameDictionary = [activeGame toDictionary]; NSError * 오류; NSData * jsonData = [NSJSONSerialization dataWithJSONObject: savedGameDictionary 옵션: NSJSONWritingPrettyPrinted 오류: & 오류]; NSString * savedGameString = [[NSString alloc] initWithData: jsonData 인코딩: NSUTF8StringEncoding]; NSString * savedGamesFilePath = [NSHomeDirectory () stringByAppendingPathComponent: @TTTGAMESESSIONSAVEDFILEPATH]; NSJSONSerialization 클래스의 dataWithJSONObject 메쏘드에 중요한 메소드가 있습니다.
동일한보기 컨트롤러에서 restoreGame 메소드의 역순으로 수행되는 작업 (즉, JSON 문자열에서 NSDictionary로)을 볼 수 있습니다.
- (IBAction) restoreGame: (id) sender {NSLog 경기"); … NSError * restoreError = nil; NSMutableDictionary * savedDictionary = [NSJSONSerialization JSONObjectWithData: [savedGameString dataUsingEncoding: NSUTF8StringEncoding] 옵션: NSJSONReadingMutableContainers 오류: & restoreError]; activeGame = [[TTTGame alloc] initFromDictionary: savedDictionary]; TTTGameGrid * gameGrid = [활성 게임 getGameGrid]; if (! [activeGame isActive]) [boardView disableInput]; [boardView setGrid: gameGrid]; [gameView redraw];}
핵심 메소드는 JSON 데이터에서 Objective-C NSDictionary를 만드는 것과 반대의 작업을 수행하는 JSONObjectWithData입니다.