首先,让我演示一下重现“bug”的步骤。
-
创建一个新的NSManagedObject。
-
-
使用willAccessValueForKey:nil再次“unfoult”对象-此时,awakeFromFetch通知应该已收到,但没有通知。所有依赖它的代码都失败了,烤面包机里的面包也烧焦了:)
有趣的是,如果我在执行步骤2之前“保存”托管对象上下文,那么一切都会正常工作,awakeFromFetch通知会如预期的那样出现。
到目前为止,google没有返回任何具体信息,除了一位绅士
here
这似乎遇到了同样的问题。
所以我的问题是双重的-这真的是一个bug吗,如果是的话,那么你建议其他的绕行(sic)是什么。
编辑:这不是虫子,但那只是我的愚蠢。看,如果我不保存一个对象就把它变成错误,那么就没有要维护的对象的历史记录。因此在这种情况下(即对于未保存的对象),没有awakeFromFetch的逻辑概念(因为它从未保存)。如果我还搞砸了,请告诉我。
不管怎样,我的“实际”问题是在别的地方-藏在两个“明白”的后面
-
如果使用refreshObject:mergeChanges:NO将一个对象转换为错误,以便中断核心数据可能已建立的任何保留周期,则还必须对子对象执行相同的操作-每个可能与其他人参与循环保留的子对象都必须手动出错。我(错误地)认为,父母的过错会自动打破孩子之间的循环。
-
真的有那么一天:)