如何保存/存档包含自定义对象的NSMutableArray?

Joe*_*eds 2 cocoa nsmutablearray nscoder

我有一个NSMutableArray*recordsArray,键是NSStrings,值是一个自定义对象:

@interface DictRecord : NSObject{
}
@property (nonatomic, retain) NSString* word; 
@property (nonatomic, retain)  NSString  *wordStatus;
Run Code Online (Sandbox Code Playgroud)

Cocoa:如何保存/存档包含自定义对象的NSMutableArray

我想保存NSMutable数组,最好是非二进制(稍微可读)格式.

我已阅读文档并已将编码方法添加到DictRecord:

- (void) encodeWithCoder: (NSCoder *)coder
{
    [coder encodeObject: _word forKey:@"word" ];
    [coder encodeObject: _wordStatus forKey:@"wordStatus" ];
}
- (id) initWithCoder: (NSCoder *) coder
{
    self = [super init];
    if (self) {
        self.word = [coder decodeObjectForKey:@"word"];
        self.wordStatus = [coder decodeObjectForKey:@"wordStatus"];
}
Run Code Online (Sandbox Code Playgroud)

然后我尝试保存使用:

[recordsArray writeToFile:filePath atomically:YES];
Run Code Online (Sandbox Code Playgroud)

文件已保存,但我可以看到它是空的.

任何人都可以告诉我我省略了哪些步骤,或者我是否以错误的方式解决了这个问题.

谢谢

pau*_*kow 5

这有点令人困惑,但NSCoding和NSArray和NSDictionary属性列表方法是两个不同的东西.

你有两个选择:

  1. 使用NSCoding.这是一个答案,显示如何正确获取调用数组内容的编码方法.
  2. 使用-[NSArray writeToFile:atomically:].而不是实现-initWithCoder:-decodeWithCoder创建自己的两种方法:-dictionaryValue-initWithDictionary:.要编写,遍历模型对象数组,构建一个新的字典数组,并-writeToFile:atomically:在其上调用.要读取,请调用其中一个NSArray读取方法,获取它包含的字典,然后调用-initWithDictionary:每个字典.

如果你想要一个人类可读的plist,第二个选项是一个不错的选择.