带有 NSManagedObject 的 EXC_BAD_ACCESS

Posted

技术标签:

【中文标题】带有 NSManagedObject 的 EXC_BAD_ACCESS【英文标题】:EXC_BAD_ACCESS with NSManagedObject 【发布时间】:2012-11-02 22:05:28 【问题描述】:

我正在尝试在多个表中插入值(准确地说是 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】:

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

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

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

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

【讨论】:

以上是关于带有 NSManagedObject 的 EXC_BAD_ACCESS的主要内容,如果未能解决你的问题,请参考以下文章

调用 NSManagedObject 方法会引发 EXC BAD ACCESS

Swift 在访问 NSManagedObject 的属性时给出错误线程 1:EXC_BAD_ACCESS(code=1, address=0x0)

访问 NSManagedObject 的属性时的 EXC_BAD_ACCESS KERN_INVALID_ADDRESS

带有 NSPersistentCloudKitContainer 崩溃的 Mac 催化剂:EXC_BAD_INSTRUCTION(代码=EXC_I386_INVOP,子代码=0x0)

带有 WebView 的 Swift EXC_BAD_INSTRUCTION (code=EXC_I386_INVOP, subcode=0x0)

非零整数值的核心数据 EXC_BAD_ACCESS