0

所以,我意识到我需要使用 NSCoding 将我的自定义对象保存到 plist。

initWithCoder我正在苦苦挣扎的部分正是在我实现了andencodeWithCoder方法之后我是如何做到这一点的。他们分别返回idvoid,所以如果他们已经将我的对象转换为 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 中,并在重新打开应用程序时调用。

任何帮助表示赞赏!

4

2 回答 2

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:@"games"]; – 卢克奇

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

if (![NSKeyedArchiver archiveRootObject:self.dataController.masterGameList
                                 toFile:myPlistFile]) {
    // Handle error
}

然后你加载它:

self.dataController.masterGameList =
    [NSKeyedUnarchiver unarchiveObjectWithFile:myPlistFile];
于 2012-09-11T14:37:05.573 回答
0

您将需要NSKeyedArchiver在对象图的根对象上实现以保存然后NSKeyedUnarchiver重构对象图。

这个教程

于 2012-09-11T14:48:33.677 回答