1

我一直在关注本指南,使用 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 都没有出现在输出中,我无法弄清楚为什么它没有被正确调用。如果您需要更多信息,请告诉我。

谢谢。

4

1 回答 1

0

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

您需要添加将对象分配给_conosirDoc变量的代码以使其工作:

_conosirDoc = [[ConosirDocType alloc] init];

ConosirDocType上面替换为_conosirDoc.

于 2013-08-18T11:37:42.757 回答