0

我有两个持久存储(它们都是 sqlite 存储),因此有两个持久存储协调器,每个协调器都使用自己的managedObjectContext 。现在,我这里有一个情况。我的一个观点是观察NSManagedObjectContextDidSaveNotification的通知。它接收通知很好,但我如何比较哪个上下文触发了通知。

我做了以下操作,看看它是否是两种情况之一;

-(void)contextSaved:(NSNotification*)notification{
   NSManagedObjectContext *context = notification.object;
   if(context == myFirstContext){
     NSLog(@"This is the first context");
   }else{
     NSLog(@"This is the second context");
   }
}

这两种情况都失败了,我没有得到任何类型的日志,但是如果我记录了对象的地址,看起来就好了;

NSLog(@"Notification object pointer %p, first context pointer %@", context, myFirstContext);

如何将这两个上下文与通知中的上下文进行比较并检测保存上下文并采取行动。请建议。对于您提供的任何帮助,我都会非常高兴。

4

1 回答 1

0

这正是您检查哪个托管对象上下文发布通知的方式。通知对象是 MOC,由于您想知道它是否与其他已知对象完全相同,==因此比较它们是正确的方法。如果两者都没有NSLog产生任何输出,那么几乎可以肯定不会调用此方法。也许您还没有注册NSManagedObjectContextDidSaveNotification,或者您确实注册了但object参数的值错误。尝试在此方法的第一行设置断点以查看它是否被调用。如果没有,请查看您注册通知的位置并找出您没有收到通知的原因。

于 2013-01-03T17:50:16.013 回答