我想用下面的方法保存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 对象的事情是首先你必须检查它的类型:它可以是 NSDictionary
或 NSArray
-取决于输入和格式。
当您得到一个只有一个元素的数组时,就会出现常见问题——您要查找的字典。如果您的字典 {...}
json 表示嵌入在 []
中,就会发生这种情况。
关于ios - 将 NSDictionary 保存到文件是否有任何限制,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20742678/