iPhone - 将数据保存到plist文件

时间:2013-08-18 11:35:08

标签: iphone ios objective-c nscoding nskeyedunarchiver

我一直关注this guide使用NSCoding将数据保存到plist。据我所知,我一步一步地按照指南进行了操作,并查看了示例代码,但是当涉及到实际保存数据时,它似乎没有保存它,也似乎没有调用保存功能。我通过按钮调用保存功能:

- (IBAction)saveAll:(id)sender {
    NSLog(@"start saveall");
    _conosirDoc.data.wineType = _wineType.text;
    _conosirDoc.data.wineTitle = _wineTitle.text;
    _conosirDoc.data.wineYear = _wineYear.text;
    _conosirDoc.data.wineVolume = _wineVolume.text;
    _conosirDoc.data.wineRating = _wineRating.text;
    _conosirDoc.data.wineCountry = _wineCountry.text;
    _conosirDoc.data.wineRegion = _wineRegion.text;
    _conosirDoc.data.wineGrapes = _wineGrapes.text;
    [_conosirDoc saveData];
    NSLog(@"%@", _conosirDoc.data.wineType);
    NSLog(@"end saveall");
}

所以当点击按钮时,日志显示为:

start saveall
(null)
end saveall

所以我从那里在saveData函数中设置了以下NSLog:

- (void)saveData {
    NSLog(@"being called?");
    if (_data == nil) return;
    NSLog(@"START");
    [self createDataPath];
    NSLog(@"END");
    NSString *dataPath = [_docPath stringByAppendingPathComponent:kDataFile];
    NSLog(@"%@", dataPath);
    NSMutableData *data = [[NSMutableData alloc] init];
    NSKeyedArchiver *archiver = [[NSKeyedArchiver alloc] initForWritingWithMutableData:data];
    [archiver encodeObject:_data forKey:kDataKey];
    [archiver finishEncoding];
    [data writeToFile:dataPath atomically:YES];

}

并且由此,这些NSLog中没有一个出现在输出中,我无法弄清楚为什么它没有被正确调用。如果您需要更多信息,请与我们联系。

感谢。

1 个答案:

答案 0 :(得分:0)

您看到的日志行(尤其是您未看到的日志行)表明_conosirDocnil - 尚未初始化:saveData将会"being called?"的唯一原因不记录无条件saveDatanil上调用了_conosirDoc。在所有其他情况下,至少会有额外的日志行。

您需要添加将对象分配给_conosirDoc = [[ConosirDocType alloc] init]; 变量的代码,以使其有效:

ConosirDocType

将上面的_conosirDoc替换为{{1}}的实际类型。