Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/xcode/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Objective c 使用NSCoder将自定义对象保存到plist_Objective C_Xcode_Plist_Nscoding_Initwithcoder - Fatal编程技术网

Objective c 使用NSCoder将自定义对象保存到plist

Objective c 使用NSCoder将自定义对象保存到plist,objective-c,xcode,plist,nscoding,initwithcoder,Objective C,Xcode,Plist,Nscoding,Initwithcoder,因此,我意识到需要使用NSCoding将自定义对象保存到plist 我正在努力解决的部分正是在我实现了initWithCoder和encodeWithCoder方法之后如何做到这一点。它们分别返回id和void,因此,如果它们已将我的对象转换为NSData或对其执行的任何操作,那么数据在哪里,我可以保存它 我已设置了相应的方法: - (id)initWithCoder:(NSCoder *)decoder { // Decode if (self = [super init]) {

因此,我意识到需要使用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,并在重新打开应用程序时调用


感谢您的帮助

这取决于你想做什么。
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] 福克斯:“游戏”];-卢卡奇

这是一个KVC API。归档/非归档方法是类方法,因此您只需使用以下方法保存整个对象图:

if (![NSKeyedArchiver archiveRootObject:self.dataController.masterGameList
                                 toFile:myPlistFile]) {
    // Handle error
}
然后加载以下内容:

self.dataController.masterGameList =
    [NSKeyedUnarchiver unarchiveObjectWithFile:myPlistFile];

您需要在对象图的根对象上实现
NSKeyedArchiver
,以进行保存,然后
NSKeyedArchiver
重新构建对象图


请参见

本教程以Mac而非iOS为中心,但我在尝试(我认为)告诉它我希望它编写哪个阵列时遇到了一个错误。正在此行获取“预期标识符:
[rootObject setValue:[self.dataController.masterGameList]forKey:@“games”]我试图(我想)告诉它我想写哪个数组时遇到了一个错误。正在此行获取“预期标识符:
[rootObject setValue:[self.dataController.masterGameList]forKey:@“games”]
是否
self.dataController.masterGameList
是要持久化的对象图的根对象?如果是这样,那么您将归档该对象,例如,
NSData*archivedData=[NSKeyedArchiver-archivedDataWithRootObject:self.dataController.masterGameList]