2011-09-25 98 views
0

我已经在AppDelegate中创建一个简单的函数来将一些数据存储在数据库(CoreData)中,这将从各个ViewController类中调用,这些类连接了do AppDelegate。这是该函数的主体:CoreData(存储新对象)在AppDelegate = SIGABRT

- (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

是你的实体真的叫做“EntityName”? – Rog

+0

你在应用程序委托中有'setting'属性吗? – TechZen

+0

@Rog:这只是一个例子。 – Heps

回答

1

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

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

顺便说一句,如果这是你的错误,最好离开KVC,并创建自己的NSManagedObject子类作为一种习惯 - 让生活变得更容易。

+0

谢谢您的回复,但它没有解决问题。键和值都是NSString以及实体属性。没有任何异常可见(或者我不知道如何查看它们)。在控制台中只有SIGABRT没有大胆的注释:/ – Heps

+0

逻辑规定,功能与从另一个控制器调用它时必须有所不同。这可能是您的托管对象模型未正确初始化;你的'managedObjectContext'是零;和这样的事情。 'NSLog'有问题的所有变量,你应该找到问题。 – Mundi

0

最可能的解释是,这条线:

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

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

由于该问题只出现在应用程序代理中,因此我首先会怀疑self.managedObjectContext存在一些问题。