使用NSManagedObject的EXC_BAD_ACCESS

时间:2012-11-02 22:05:28

标签: iphone core-data nsmanagedobject nsentitydescription

我正在尝试在多个表中插入值(确切地说是25个),我能够在除了一个表之外的所有表中插入记录,这是因为一个属性,如果我删除该属性它开始将数据保存到表中但是当我添加该属性并尝试设置其值时,它将以EXC_BAD_ACCESS结束。

我尝试更改属性的名称,即使是表格,但也没有用。下面是我的代码::

Ashes *ashesObj = (Ashes *)[NSEntityDescription insertNewObjectForEntityForName:@"Ashes" inManagedObjectContext:managedObjectContext];

[ashesObj setAshes_id:@""];
[ashesObj setArrangement_id:@"34"];
[ashesObj setCasket_order_date:@""];
[ashesObj setCasket_model:@""];
[ashesObj setCasket_supplier:@""];
//[ashesObj setAshes_address:@"N/A"];    (This one is causing problem)
[ashesObj setPostal_code:@"N/A"];
[ashesObj setName_client:@""];
[ashesObj setTelephone:@""];
[ashesObj setEmail:@""];

    NSError *error;

if (![managedObjectContext save:&error])
{
    NSLog(@"Problem saving: %@", [error localizedDescription]);
}

1 个答案:

答案 0 :(得分:5)

一般最佳实践,您遇到EXEC_BAD_ACCESS的任何时候都会立即使用工具Zombies运行您的代码(以及相同的点击/代码路径)。

使用取消注释的那行代码执行此操作。您的应用程序将崩溃,但是仪器和僵尸会指向导致崩溃的确切代码行(与您在那里的代码不同)。

很可能你不小心过度释放了一个对象,无论出于何种原因,它只会在你执行上面的代码时暴露出来。

您可以使用“产品”菜单从XCode启动Instruments,然后选择“配置文件”。仪器启动后,系统会提示您输入要使用的工具,选择Zombies。然后,一旦出现模拟器,执行测试用例以重现该问题。一旦崩溃发生,您将看到僵尸的信息。