Objective c 刷新NSManagedObjectContext

Objective c 刷新NSManagedObjectContext,objective-c,core-data,watchkit,mmwormhole,Objective C,Core Data,Watchkit,Mmwormhole,我正在为iPhone应用程序编写WatchKit扩展。我使用应用程序组共享核心数据。这是可行的,数据是共享的。当使用watch创建新的NSManagedObject时,我会向iPhone应用程序发送一个新对象已创建的通知。为此,我使用MMWormhole。iPhone应用程序收到MMWormhole通知,现在我必须执行最后一步-刷新NSManagedObjectContext。我怎么做 我试图在MMWormhole通知中转发NSManagedObjectContextDidSaveNotific

我正在为iPhone应用程序编写WatchKit扩展。我使用应用程序组共享核心数据。这是可行的,数据是共享的。当使用watch创建新的
NSManagedObject
时,我会向iPhone应用程序发送一个新对象已创建的通知。为此,我使用
MMWormhole
。iPhone应用程序收到
MMWormhole
通知,现在我必须执行最后一步-刷新
NSManagedObjectContext
。我怎么做


我试图在
MMWormhole
通知中转发
NSManagedObjectContextDidSaveNotification
通知,并在iPhone应用程序中使用
mergeChangesFromContextDidSaveNotification
,但是它不能像
MMWormhole
那样序列化通知,并且
NSManagedObject
不支持它

简单的方法就是让应用程序重新加载数据。重新执行任何回迁,以便从持久存储中获取最新数据

如果要使其更复杂,请执行以下操作:

在监视扩展中,对于每个新的/更改的/删除的对象

  • 调用
    objectID
    获取
    NSManagedObjectID
  • 将对象ID转换为字符串
    URIRepresentation
  • MMWormhole
    消息中传递这些字符串
在应用程序中,当收到消息时

  • 使用
    [NSPersistentStoreCoordinator ManagedObjectedForUriRepresentation:
    将字符串转换回
    NSManagedObjectID
  • 使用
    [NSManagedObjectContext existingObjectWithID::
    获取与对象ID对应的托管对象

现在您知道哪些对象需要刷新。

您所说的“重新加载其数据”到底是什么意思了。我怎么做?我已经获取了NSFetchedResultsController,即使我执行了蚀刻,也不会发生任何事情。我相信iPhone应用程序上的NSManagedObjectContext不知道持久存储中的更改。在这种情况下,existingObjectWithID是否有效?如果更改已保存到持久性存储中,
existingObjectWithID:
将有效。您可能需要使用
shouldRefreshRefetchedObjects
从存储文件中获取新值。另外,在重做获取之后,请确保更新显示数据的UI(可能是表视图)。感谢Tom的帮助。它起作用了,但我还必须将stalenessInterval设置为0。否则,上下文不会看到新对象。不确定这是不是正确的方法?酷。谢谢你的帮助。如果你能更新答案就好了。