1

我正在尝试在多个表中插入值(准确地说是 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]);
}
4

1 回答 1

5

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

使用未注释的那行代码来执行此操作。您的应用程序会崩溃,但 Instruments and Zombies 会指出导致崩溃的确切代码行(这与您那里的代码不同)。

很可能您不小心过度释放了一个对象,并且无论出于何种原因,它仅在您执行上面的代码时才被暴露。

您可以使用 Product 菜单从 XCode 启动 Instruments,然后选择 Profile。Instruments 启动后,系统会提示您使用该工具,选择 Zombies。然后一旦模拟器出现,执行测试用例重现问题。崩溃发生后,您将看到来自 Zombies 的信息。

于 2012-11-02T22:33:19.157 回答