Video: Cách khóa ứng dụng trên iphone mỗi khi cho người khác mượn 2025
Ghi chú đối tượng JavaScript (JSON) đã trở thành tiêu chuẩn trên thực tế về đại diện dữ liệu trong các ứng dụng iOS. Bạn có thể sử dụng JSON để truyền dữ liệu qua web và dưới dạng định dạng để lưu và truy xuất dữ liệu lâu dài. JSON là cả hai con người có thể đọc được và dễ dàng cho các máy để hiểu. Dữ liệu trong JSON có thể nằm trong một trong hai cấu trúc:
-
Một đối tượng bao gồm một cặp giá trị tên không đặt hàng. Mỗi tên-giá trị tương ứng với một thuộc tính của đối tượng. Mỗi cặp tên-giá trị có thể được lồng nhau, trong trường hợp thuộc tính đang được đại diện có tính phân cấp.
-
Một mảng được sắp xếp các giá trị. Mỗi giá trị trong mảng có thể là một vô hướng (một giá trị Boolean, chuỗi hoặc giá trị số), một đối tượng, hoặc một mảng.
Trong Tic-Tac-Toe, JSON đại diện cho trạng thái của trò chơi. Trạng thái này bao gồm:
-
Trình phát hiện tại (cầu thủ 1 hoặc cầu thủ 2) được biểu diễn dưới dạng số nguyên (0 cho Người chơi 1 và 1 cho Người chơi 2).
-
Trạng thái của trò chơi - dù đó là hoạt động hay hoàn thiện; nếu nó đã hoàn thành, cho dù đó là chiến thắng hay rút thăm; và nếu thắng, bởi ai.
Các trạng thái cũng được biểu diễn như các số nguyên, với Không hoạt động là -1, Hoạt động là 0, Won là 1, và Vẽ là 2.
-
Trạng thái của lưới - nghĩa là, những ký hiệu có mặt trong mỗi ô vuông trên lưới điện. Lưu ý rằng các ký hiệu được biểu diễn dưới dạng các giá trị số nguyên 0, 1 và 2, tương ứng với các giá trị Blank, X và O.
-
Biểu tượng hiện tại (biểu tượng sẽ được chơi khi di chuyển tiếp theo). Ở đây (và để thay đổi ví dụ), chúng tôi đại diện cho biểu tượng là chuỗi "X" hoặc chuỗi "O" hoặc một khoảng trống ("").
-
Số lần chơi (số lần di chuyển được thực hiện đến thời điểm hiện tại trong trò chơi) được thể hiện dưới dạng số nguyên.
Trong mã này, chúng tôi hiển thị đối tượng JSON tương ứng với trò chơi Tic-Tac-Toe hoạt động:
{"TTTGameKeyCurrentPlayer": 0, "TTTGameKeyState": 0, "TTTGameKeyGridState": "2, 1, 2, TTTGameKeyCurrentSymbol ":" X "," TTTGameKeyPlaycount ": 8}
JSON dễ dàng ánh xạ tới các cấu trúc dữ liệu sẵn có (chẳng hạn như mảng, cấu trúc và đối tượng) trong khá nhiều ngôn ngữ lập trình. Hình thức đối tượng của JSON dễ dàng ánh xạ tới các đối tượng hoặc cấu trúc ngôn ngữ lập trình, trong khi dạng mảng của JSON có thể ánh xạ tới một mảng, vectơ, danh sách hoặc chuỗi, về cơ bản bất cứ cấu trúc dữ liệu nào có thể chứa một tập các đối tượng được yêu cầu.
Trong Tic-Tac-Toe, đối tượng JSON tương ứng với trạng thái của trò chơi được ánh xạ tới một NSDictionary, bởi vì một đối tượng NSDictionary cũng bao gồm các cặp giá trị tên lồng nhau.Kết quả là, khi bạn phải lưu trạng thái của trò chơi, bạn sẽ có trạng thái như một đối tượng NSDictionary và sau đó chuyển nó thành một chuỗi JSON.
Khi bạn lấy trạng thái của trò chơi, bạn làm ngược lại - bạn đọc dữ liệu JSON và chuyển đổi nó sang một đối tượng NSDictionary và sau đó sử dụng NSDictionary để khôi phục trò chơi đến trạng thái lưu lại.
Ví dụ sau cho biết chuyển đổi này từ một đối tượng từ điển sang JSON và từ đối tượng dữ liệu JSON sang một chuỗi (từ phương thức saveGame trong bộ điều khiển Game Session - các tập tin TTTGameSessionViewController.m và.h):
- (IBAction) saveGame: (id) sender {NSDictionary * savedGameDictionary = [activeGame toDictionary]; Lỗi NSError *; NSData * jsonData = [NSJSONSerialization dataWithJSONObject: savedGameDictionary options: NSJSONWritingPrettySản xuất lỗi: & lỗi]; NSString * savedGameString = [[NSString alloc] initWithData: mã hóa jsonData: NSUTF8StringEncoding]; NSString * savedGamesFilePath = [NSHomeDirectory () chuỗiByAppendingPathComponent: @TTTGAMESESSIONSAVEDFILEPATH]; [savedGameString writeToFile: savedGamesFilePath atomically: YES encoding: NSUTF8StringEncoding error: NULL];}
Phương pháp quan trọng ở đây là trong phương thức dataWithJSONObject từ lớp NSJSONSerialization.
Bạn có thể thấy thao tác ngược lại (có nghĩa là, từ một chuỗi JSON đến NSDictionary) trong phương thức restoreGame trong cùng trình điều khiển chế độ xem:
- (IBAction) restoreGame: (id) sender {NSLog (@ "Khôi phục trò chơi "); … NSError * restoreError = nil; NSMutableDictionary * savedDictionary = [NSJSONSerialization JSONObjectWithData: [savedGameString dataUsingEncoding: NSUTF8StringEncoding] tùy chọn: NSJSONReadingMutableContainers lỗi: & restoreError]; activeGame = [[TTTGame alloc] initFromDictionary: savedDictionary]; TTTGameGrid * gameGrid = [activeGame getGameGrid]; nếu (! [activeGame isActive]) [boardView disableInput]; [boardView setGrid: gameGrid]; [gameView redraw];}
Ở đây, phương pháp chủ chốt là JSONObjectWithData, nó thực hiện thao tác ngược lại của việc tạo ra ObjectD-C NSDictionary từ dữ liệu JSON.
