CoreData(存储新对象)在AppDelegate = SIGABRT中

时间:2011-09-25 11:33:21

标签: iphone objective-c ios xcode core-data

我打算在AppDelegate中创建一个简单的函数来将一些数据存储在数据库(CoreData)中,这些数据将从连接到ViewController的各种AppDelegate类中调用。这是这个功能的主体:

- (void) setSetting:(NSString *)setting :(NSString *)value {    
    NSManagedObject* newSetting = [NSEntityDescription insertNewObjectForEntityForName:@"EntityName" inManagedObjectContext:self.managedObjectContext];
    [newSetting setValue:value forKey:setting];
    NSError* error;
    [self.managedObjectContext save:&error];
}

但调用此函数(甚至从AppDelegate本身)返回SIGABRT与setValue

一致

但是,当我在ViewController类中实现该功能时(当然,将self.替换为与AppDelegate正确连接) - 它可以正常

我不明白,我非常感谢在AppDelegate中创建灵活功能以帮助将数据保存在数据库中的一些帮助。

2 个答案:

答案 0 :(得分:1)

这看起来有点像key部分不是NSStringvalue部分不是正确的数据类型。请检查,并且可能使函数中的参数顺序与setValue:forKey方法中的相同,以避免混淆。

此外,根据documentation,如果模型中未定义key,则会引发异常 - 因此请仔细检查您的密钥字符串。

顺便说一下,如果这是你的错误,最好远离KVC并创建你自己的NSManagedObject子类而不是习惯 - 让生活更轻松。

答案 1 :(得分:0)

最可能的解释是这一行:

NSManagedObject* newSetting = [NSEntityDescription insertNewObjectForEntityForName:@"EntityName" inManagedObjectContext:self.managedObjectContext];

...返回一个nil对象,因为实体名称不正确或者因为managedObjectContext本身为nil或者无效。

由于问题仅发生在app委托中,我首先会怀疑self.managedObjectContext存在一些问题。