是否有保存NSDictionary文件的限制

我想用下面的方法来保存NSDictionary

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

但是,对于一些字典,它的工作原理和一些复杂的字典是行不通的。

帮我!

为了使NSDictionary成功保存,它所有的对象必须符合NSCoding协议 。

总之这意味着你必须执行

 - (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对象的事情是,首先你必须检查它的types:它可以是一个NSDictionary或一个NSArray – 取决于input和格式。

当只有一个元素的数组 – 你正在寻找的字典时遇到常见的问题。 如果您的字典{...} json表示被embedded在[]就会发生这种情况。

该文件说:

 - (BOOL)writeToFile:(NSString *)path atomically:(BOOL)flag 

在写出文件之前,此方法recursion地validation所有包含的对象是属性列表对象(NSData,NSDate,NSNumber,NSString,NSArray或NSDictionary的实例),如果所有对象不是属性列表对象,则返回NO生成的文件不会是有效的属性列表。

你在你的字典里放了什么东西?
把属性列表对象放在你的字典中,那么没有理由不起作用。

你也应该看到方法的返回值。 ( 是或否)。