我打算在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
中创建灵活功能以帮助将数据保存在数据库中的一些帮助。
答案 0 :(得分:1)
这看起来有点像key
部分不是NSString
或value
部分不是正确的数据类型。请检查,并且可能使函数中的参数顺序与setValue:forKey
方法中的相同,以避免混淆。
此外,根据documentation,如果模型中未定义key
,则会引发异常 - 因此请仔细检查您的密钥字符串。
NSManagedObject
子类而不是习惯 - 让生活更轻松。
答案 1 :(得分:0)
最可能的解释是这一行:
NSManagedObject* newSetting = [NSEntityDescription insertNewObjectForEntityForName:@"EntityName" inManagedObjectContext:self.managedObjectContext];
...返回一个nil对象,因为实体名称不正确或者因为managedObjectContext本身为nil或者无效。
由于问题仅发生在app委托中,我首先会怀疑self.managedObjectContext
存在一些问题。