带有 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)