如图所示,我有以下模型。
替代文字 http://img521.imageshack.us/img521/9741/schermata20100224a12251.png
我的应用程序需要刷新 B 的每个实例,因此在每个实例中viewWillAppear
,我都需要删除模型中的所有 B。删除 B 时,与 C 的关系的级联删除规则将删除所有 C,然后级联到所有 D。A 和 E 是常量。
我对每个对象都有 DeleteRule 如下:
A: b - Cascade
B: c - Cascade, a - Nullify
C: b - Nullify, d - Cascade
D: c - Nullify, e - Nullify
E: d - Cascade
或者
A -(cascade)->> B -(cascade)-> C -(cascade)->> D -(nullify)-> E
A <-(nullify)- B <-(nullify)- C <-(nullify)- D <-(nullify) E
我在级联所有 B、C、D 上的删除时遇到问题。我的 fetchRequest 对象返回 A 中 B 的每个实例,然后我-deleteObject:
从 managedObjectContext 调用每个 B 上的 。但是在对 [managedObjectContext save:&error] 的调用中有 EXC_BAD_ACCESS。
有人可以告诉我我做错了什么吗?我是否对每个实体的 DeleteRule 有问题,还是问题出在其他地方?处理三个对象 B、C、D 的级联删除的最佳实践是什么?
编辑:
这是引发错误时的堆栈跟踪:
#0 0x01d843ae in ___forwarding___
#1 0x01d606c2 in __forwarding_prep_0___
#2 0x01c618b6 in -[NSFetchedResultsController(PrivateMethods) _managedObjectContextDidChange:]
#3 0x0003263a in _nsnote_callback
#4 0x01d4f005 in _CFXNotificationPostNotification
#5 0x0002fef0 in -[NSNotificationCenter postNotificationName:object:userInfo:]
#6 0x01bc217d in -[NSManagedObjectContext(_NSInternalNotificationHandling) _postObjectsDidChangeNotificationWithUserInfo:]
#7 0x01c21763 in -[NSManagedObjectContext(_NSInternalChangeProcessing) _createAndPostChangeNotification:withDeletions:withUpdates:withRefreshes:]
#8 0x01ba65ea in -[NSManagedObjectContext(_NSInternalChangeProcessing) _processRecentChanges:]
#9 0x01bdc728 in -[NSManagedObjectContext save:]
这是我尝试将 NSZombieEnabled & MallocStackLogging 设置为 YES 时控制台中的日志:
2010-02-24 15:41:39.803 Foo[2591:207] deleting object: FUM5
2010-02-24 15:41:40.515 Foo[2591:207] *** -[viewController controllerWillChangeContent:]: message sent to deallocated instance 0x7e54510
编辑 2:添加源代码
我试图通过创建一个具有图像中确切架构的新项目来重新创建这种情况。你可以从这里下载。还有一个 README 文本。希望我已经提供了足够的信息。