我有以下对象的数组:
@interface SACameraLocation : NSObject
{
NSInteger locId;
NSString *name;
CLLocationCoordinate2D coordinate;
NSInteger speed;
NSInteger shootingMode;
NSInteger side;
}
然后我试图将数组写入plist文件:
if([arr writeToFile:path atomically:YES])
NSLog(@"Write OK");
else
NSLog(@"Write Fail");
由于标量对象,我猜这个失败了。将此类对象序列化/反序列化为文件的最简单方法是什么?
答案 0 :(得分:0)
请阅读NSArray writeToFile:atomically:
的文档:
如果数组的内容都是属性列表对象(NSString,NSData,NSArray或NSDictionary对象),则此方法编写的文件可用于使用类方法arrayWithContentsOfFile:或实例方法initWithContentsOfFile初始化新数组: 。在写出文件之前,此方法以递归方式验证所有包含的对象是属性列表对象,如果所有对象都不是属性列表对象,则返回NO,因为生成的文件不是有效的属性列表。
您无法编写自定义对象数组。这就是它失败的原因。您可以让您的类符合NSCoding
协议并实现两个必需的方法。然后,您可以使用NSData
将对象转换为NSKeyedArchiver
。或者您可以使用归档器一次编码整个数组,然后写出一个NSData
对象。
另一个选择是将您的对象转换为NSDictionary
并写出这些词典的数组。