【问题标题】:Unable to save table data via NSCoding无法通过 NSCoding 保存表数据
【发布时间】:2014-02-18 23:15:30
【问题描述】:

我有一个用于显示表数据的对象数组(包含项目名称和创建日期)。我想使用 NSCoding 协议保存这个数组。每次按下“提交”按钮提交新表条目时,我都会调用我的 saveDataToDisk 方法。但是,我的应用程序在点击提交时崩溃。这是我第一次学习如何保存应用程序数据,我看了几个教程,我的表格似乎是一样的。我也在网上找了几天,也没有找到解决办法。怎么了?

这是我的方法:

解码方法:

- (id)initWithCoder:(NSCoder *)decoder {
self = [super initWithCoder:decoder];
if (!self) {
    return nil;
}
self.itemArray = [decoder decodeObjectForKey:@"itemArray"];
return self;
}

编码方式:

- (void)encodeWithCoder:(NSCoder *)encoder {
[encoder encodeObject:self.itemArray forKey:@"itemArray"];
}

路径查找方法:

- (NSString*) pathForDataFile
{

NSFileManager * fileManager = [NSFileManager defaultManager];
NSString *documentsPath = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,     NSUserDomainMask, YES)[0];
NSString *filePath = [documentsPath stringByAppendingPathComponent:@"appData"];


if([fileManager fileExistsAtPath:filePath] == NO)
{
    [fileManager createDirectoryAtPath:filePath withIntermediateDirectories:NO attributes:nil error:nil];
}

NSString *fileName = @"Budgetlist.appData";
return [filePath stringByAppendingPathComponent: fileName];
}

保存数据方法:

- (void) saveDataToDisk
{
NSString * path = [self pathForDataFile];

NSMutableDictionary * rootObject;
rootObject = [NSMutableDictionary dictionary];

[rootObject setValue: [self itemArray] forKey:@"itemArray"];
[NSKeyedArchiver archiveRootObject: rootObject toFile: path];
}

加载数据方法:

- (void) loadDataFromDisk
{
NSString     * path        = [self pathForDataFile];
NSDictionary * rootObject;

rootObject = [NSKeyedUnarchiver unarchiveObjectWithFile:path];
[self setItemArray: [rootObject valueForKey:@"itemArray"]];
}

我的按钮:

- (IBAction)submitButton:(id)sender {
if (self.textField.text.length > 0 && [self.textField.text floatValue]>0) {
    self.item = [[Data alloc] init];
    self.item.itemName = self.textField.text;
    [self.itemArray addObject:self.item];
    [self.tableView reloadData];
    [self saveDataToDisk];
}

}

【问题讨论】:

    标签: ios iphone ipad save nscoding


    【解决方案1】:

    您正在尝试使用自定义对象保存 NSArray。

    您的对象也必须实现 NSCoding 协议。

    实现那些:

    - (id)initWithCoder:(NSCoder *)decoder
    - (void)encodeWithCoder:(NSCoder *)encoder
    

    在您的“数据”类中。 NSArray 正在遍历所有对象并在数组中为每个对象调用这些方法

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-12-19
      • 1970-01-01
      • 1970-01-01
      • 2014-05-31
      • 1970-01-01
      • 2016-01-13
      • 2017-08-24
      • 1970-01-01
      相关资源
      最近更新 更多