0

我有以下对象的数组:

@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");

我猜这是由于标量对象而失败的。将此类对象序列化/反序列化到文件的最简单方法是什么?

4

1 回答 1

0

请阅读以下文档NSArray writeToFile:atomically:

如果数组的内容都是属性列表对象(NSString, NSData, NSArray, 或 NSDictionary 对象),这个方法写入的文件可以通过类方法arrayWithContentsOfFile: 或者实例方法initWithContentsOfFile: 来初始化一个新数组。此方法在写出文件之前递归地验证所有包含的对象都是属性列表对象,如果所有对象都不是属性列表对象,则返回 NO,因为结果文件不是有效的属性列表。

您不能编写自定义对象数组。这就是它失败的原因。您可以让您的类符合NSCoding协议并实现两个必需的方法。然后你可以将你的对象转换为NSDatausing NSKeyedArchiver。或者您可以使用存档器一次对整个数组进行编码,然后写出一个NSData对象。

另一种选择是将您的对象转换为NSDictionary并写出这些字典的数组。

于 2013-04-12T15:02:10.947 回答