所以,我意识到我需要使用NSCoding将我的自定义对象保存到plist。
在我实施initWithCoder
和encodeWithCoder
方法之后,我正在努力解决的问题就是我如何做到这一点。他们分别返回id
和void
,所以如果他们将我的对象转换为NSData或者他们对他们做了什么,数据在哪里,那么我可以保存它吗?
我已经设置了这样的方法:
- (id)initWithCoder:(NSCoder *)decoder { // Decode
if (self = [super init]) {
self.name = [decoder decodeObjectForKey:@"gameName"];
self.genre = [decoder decodeObjectForKey:@"gameGenre"];
self.rating = [decoder decodeObjectForKey:@"gameRating"];
}
return self;
}
- (void)encodeWithCoder:(NSCoder *)encoder { // Encode
[encoder encodeObject:self.name forKey:@"gameName"];
[encoder encodeObject:self.genre forKey:@"gameGenre"];
[encoder encodeObject:self.rating forKey:@"gameRating"];
}
尝试弄清楚接下来的步骤是将这些对象(已经存在于NSMutableArray中)保存到.plist中,并在重新打开应用程序时调用。
任何帮助表示赞赏!
答案 0 :(得分:1)
嗯,这取决于你想做什么。 NSKeyedArchiver
可能就足够了。考虑:
+ (NSData *)archivedDataWithRootObject:(id)rootObject
+ (BOOL)archiveRootObject:(id)rootObject toFile:(NSString *)path
获取对象图的根对象,并使用序列化数据创建NSData对象,或将数据序列化为文件。
然后查看具有以下内容的NSKeyedUnarchiver
:
+ (id)unarchiveObjectWithData:(NSData *)data
+ (id)unarchiveObjectWithFile:(NSString *)path
我相信这会让你朝着目标前进。
修改强>
我在尝试(我认为)告诉它哪个数组时遇到错误 想要写。在此行中获取“预期标识符”: [rootObject setValue:[self.dataController.masterGameList] forKey:@ “游戏”]; - lukech
这是一个KVC API。归档/取消归档方法是类方法,因此您只需使用以下命令保存整个对象图:
if (![NSKeyedArchiver archiveRootObject:self.dataController.masterGameList
toFile:myPlistFile]) {
// Handle error
}
然后用:
加载它self.dataController.masterGameList =
[NSKeyedUnarchiver unarchiveObjectWithFile:myPlistFile];
答案 1 :(得分:0)
您需要在对象图的根对象上实现NSKeyedArchiver
以保存,然后NSKeyedUnarchiver
重新构建对象图。