使用NSManagedObject的EXC_BAD_ACCESS

Kaz*_*zmi 1 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]);
}
Run Code Online (Sandbox Code Playgroud)

And*_*sek 5

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

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

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

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