Ios 使用SharedData在iPhone和Watch之间通信更新

Ios 使用SharedData在iPhone和Watch之间通信更新,ios,core-data,watchkit,Ios,Core Data,Watchkit,我有一个共享的核心数据支持我的iPhone应用程序和WatchKit扩展。它们各自独立运行,但我担心并发使用 在扩展中,我有一个包含数据数组的UITableView。现在,它只是在-awakeWithContext期间从共享核心数据中获取该数组 我想在创建/更新/删除记录时,在应用程序和扩展程序之间进行某种通信,以便可以立即在另一端进行复制(而不是在下一次查询核心数据时) 这个问题涉及到iPhone,它有一个处理程序,可以处理手表中发生的事情,但我更担心的是它会向另一个方向发展。现在我所能想到的

我有一个共享的核心数据支持我的iPhone应用程序和WatchKit扩展。它们各自独立运行,但我担心并发使用

在扩展中,我有一个包含数据数组的
UITableView
。现在,它只是在
-awakeWithContext
期间从共享核心数据中获取该数组

我想在创建/更新/删除记录时,在应用程序和扩展程序之间进行某种通信,以便可以立即在另一端进行复制(而不是在下一次查询核心数据时)


这个问题涉及到iPhone,它有一个处理程序,可以处理手表中发生的事情,但我更担心的是它会向另一个方向发展。现在我所能想到的就是经常查询核心数据来处理它。

这是一个非常常见的解决方案,唯一的方法之一就是使用

MMWormhole使用CFNotificationCenter在应用程序和扩展程序之间即时传递更改,并通过共享应用程序组传递信息

将数据从中传递的示例:


有不同的方法

  • 你可以用
  • 如果您不喜欢使用第三方库,可以直接使用Darwin通知。stackoverflow上已经有一个好的

  • 有趣。我注意到它只是使用了
    CFNotificationCenter
    ,我可以直接使用它。这有什么坏处吗?也没有好处。MMWormhole为CFNotificationCenter提供了一个简单的包装器,无需编写。简单地使用MMWormhole要好得多。我对iOS开发相当陌生,但对我来说,学习直接使用某些东西通常比依赖外部库更有帮助。尽管在您的示例中看起来非常简单。也许我会试一试在这种情况下,我强烈建议您使用外部库。重写MMWormhole没有任何意义,因为您可能不会从中学到任何东西。专注于构建应用程序将教会你更多。我完全同意Schemetral。使用达尔文通知可能很棘手(正如我在这里指出的:)MMWormhole使用达尔文通知。
    // Sender (Watch Extension)
    [self.wormhole passMessageObject:@{@"buttonNumber" : @(1)} identifier:@"button"];
    
    // Receiver (Phone)
    [self.wormhole listenForMessageWithIdentifier:@"button" 
      listener:^(id messageObject) {
        self.numberLabel.text = [messageObject[@"buttonNumber"] stringValue];
    }];