ios - 将 NSDictionary 保存到文件是否有任何限制

标签 ios objective-c nsdictionary

我想用下面的方法保存NSDictionary

+ (void)writeDicToFile:(NSDictionary *)dic fileName:(NSString *)fileName
{
NSString *filePath = [NSTemporaryDirectory() stringByAppendingPathComponent:fileName];
[dic writeToFile:filePath atomically:YES];
}

但是对于某些字典它有效而对于某些复杂的字典它不起作用。

帮帮我!

最佳答案

为了成功保存 NSDictionary,它持有的所有对象都必须符合 NSCoding protocol .

简而言之,这意味着您必须实现

- (void)encodeWithCoder:(NSCoder *)encoder

- (id)initWithCoder:(NSCoder *)decoder

对于您所有的自定义类。

这里有一个不错的教程:http://www.raywenderlich.com/1914/nscoding-tutorial-for-ios-how-to-save-your-app-data

编辑:

一旦你编写了 NSCoder 方法,你就可以像这样保存数据:

NSMutableData *data = [[NSMutableData alloc] init];
NSKeyedArchiver *archiver = [[NSKeyedArchiver alloc] initForWritingWithMutableData:data];
[archiver encodeObject:self];
[archiver finishEncoding];
[data writeToFile:file atomically:YES];

然后像这样从文件中初始化对象:

NSData *data = [[NSData alloc] initWithContentsOfFile:file];
NSKeyedUnarchiver *unarchiver = [[NSKeyedUnarchiver alloc] initForReadingWithData:data];
self = [unarchiver decodeObject];
[unarchiver finishDecoding];

你确实提到了 json 对象的问题:关于 json 对象的事情是首先你必须检查它的类型:它可以是 NSDictionaryNSArray -取决于输入和格式。

当您得到一个只有一个元素的数组时,就会出现常见问题——您要查找的字典。如果您的字典 {...} json 表示嵌入在 [] 中,就会发生这种情况。

关于ios - 将 NSDictionary 保存到文件是否有任何限制,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20742678/

相关文章:

iphone - XML 阅读器类中讨厌的新行和空格

ios - 如何将 NSMutableDictionary 值传递给 Storyboard 中的多个 Controller ?

objective-c - 使用 iOS/Obj-c 按流派搜索 Apple App Store

ios - 为什么当我返回时我的主视图 Controller 不更新?

ios - 如何在UIImageView左上角和右下角创建UIButton

ios - Firebase 持久化,清除 Firebase 缓存

ios - 如何添加到 NSMutableDictionary 键 NSIndexPath 和值 BOOL?

objective-c - 如何在 View 中居中 NSTextField

ios - 使用 MultiPeer 框架将 NSData 发送到对等点

ios - 处理字典中的 null 和 NSDate