【问题标题】:iPhone - Saving data to a plist fileiPhone - 将数据保存到 plist 文件
【发布时间】:2013-08-18 11:35:08
【问题描述】:

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

谢谢。

【问题讨论】:

    标签: iphone ios objective-c nscoding nskeyedunarchiver


    【解决方案1】:

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

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

    _conosirDoc = [[ConosirDocType alloc] init];
    

    将上面的ConosirDocType替换为_conosirDoc的实际类型。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-09-25
      • 2017-05-30
      • 2013-12-15
      • 2011-12-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-03-18
      相关资源
      最近更新 更多