將包含巢狀數組與對象的複雜 JSON 數據持久化為 Plist 文件,便於本地讀取與備份。
- (void)writeJSONToPlist:(NSString *)jsonString {
// 1. JSON 字符串 -> NSData
NSData *jsonData = [jsonString dataUsingEncoding:NSUTF8StringEncoding];
// 2. NSData -> NSDictionary (頂層對象)
NSError *error = nil;
NSDictionary *dict = [NSJSONSerialization JSONObjectWithData:jsonData
options:NSJSONReadingMutableContainers
error:&error];
if (error) {
NSLog(@"JSON 解析失敗: %@", error.localizedDescription);
return;
}
// 3. 獲取 Document 目錄路徑
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *docPath = [paths firstObject];
NSString *plistPath = [docPath stringByAppendingPathComponent:@"user-data.plist"];
// 4. 寫入 Plist (自動處理巢狀結構)
BOOL success = [dict writeToFile:plistPath atomically:YES];
if (success) {
NSLog(@"Plist 寫入成功: %@", plistPath);
} else {
NSLog(@"Plist 寫入失敗");
}
}
NSJSONReadingMutableContainers:生成可變容器,便於後續修改writeToFile:atomically::原子寫入防止數據損壞,自動處理 NSArray/NSDictionary 序列化NSString, NSNumber, NSDate, NSData, NSArray, NSDictionary// 讀取驗證
NSDictionary *loaded = [NSDictionary dictionaryWithContentsOfFile:plistPath];
NSLog(@"載入數據: %@", loaded);
// 查看文件物理位置 (模擬器)
NSLog(@"文件路徑: %@", plistPath); // 輸出路徑可在 Finder 中打開
NSOutputStream 分塊寫入