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)
文件已保存,但我可以看到它是空的.
任何人都可以告诉我我省略了哪些步骤,或者我是否以错误的方式解决了这个问题.
谢谢
这有点令人困惑,但NSCoding和NSArray和NSDictionary属性列表方法是两个不同的东西.
你有两个选择:
-[NSArray writeToFile:atomically:].而不是实现-initWithCoder:和-decodeWithCoder创建自己的两种方法:-dictionaryValue和-initWithDictionary:.要编写,遍历模型对象数组,构建一个新的字典数组,并-writeToFile:atomically:在其上调用.要读取,请调用其中一个NSArray读取方法,获取它包含的字典,然后调用-initWithDictionary:每个字典.如果你想要一个人类可读的plist,第二个选项是一个不错的选择.