【发布时间】:2012-08-27 18:20:09
【问题描述】:
更新:整理问题并使其更清晰
我收到EXC_BAD_ACCESS 在NSManagedObject 上崩溃。
我有一个 Sentence 托管对象,我将它传递给模态视图 (addStoryItem),如下所示:
addStoryItem.sentence = (Sentence*)[fetchedResultsController objectAtIndexPath:indexPath];
AddStoryItem 设置为保留Sentence:
@property (retain) Sentence *sentence;
有时用户需要做一些显示另一个模式的事情(在addStoryItem 之上)——这不会影响这个对象,但它确实需要一个 NSMutableSet 的副本——sentence.audiosets
如果他们确实查看了此模式,则每当我尝试访问或设置句子对象或其属性时,一旦用户返回到 addStoryItem,我就会得到一个 EXC_BAD_ACCESS
- 有一个当前的托管对象上下文和获取的结果控制器
- 一切正常,除非我显示模态视图控制器(afaik,它与句子对象没有任何关系)
- Zombies 已开启,但没有告诉我任何信息(BRAINS?)
下面是对发生的事情的简单总结:
- 用户在表格视图中选择行
- 我从表中获取对象并设置模态的句子属性,然后使用 fetchedResultsController 显示模态
- 我显示一个字符串、图像并设置一个nsset从句子到模态的ui方面
- 如果用户需要修改 nsset,他们会显示另一个模式,其中包含第一个 nsset 的副本(不会更改或访问句子对象)
- 如果我在关闭第二个模态(或 NSLOG 句子)后尝试在句子中设置属性 -
EXC_BAD_ACCESS。
就我而言,我自己的句子。 addStoryItem 的其他属性仍然在内存中徘徊 - 但是当我尝试访问它时,句子不存在。是的,我在 addStoryItem 的 dealloc 中释放了句子——但这没有被调用(我在那里有一个日志语句)。
你能帮忙吗?很高兴提供更多代码或信息。相当沮丧!
【问题讨论】:
-
当您打开第二个模态时,您的第一个模态可能会被释放。
-
@mark 我也这么认为——这可能是问题的一部分。但是我可以在表格视图中复制错误,所以我认为我一定是在选择要传递的对象时做错了。更新的问题。
-
哪一行代码会导致 EXC_BAD_ACCESS?
-
任何行访问 (NSLog) 或设置 [sentence setText:@"foo"] 句子对象。在 tableView 示例中,NSLog@"sentenceToUpdate: %@" 行。
-
在尝试使用之前检查 fetchedResultsController 是否为 nil。
标签: objective-c uitableview core-data memory-management nsmanagedobject