gpt4 book ai didi

ios - iOS App Containing Extension 和 Extension (not Host App) 之间如何通信

转载 作者:IT王子 更新时间:2023-10-29 05:10:09 26 4
gpt4 key购买 nike

TLDR:是否可以在 iOS 应用及其扩展程序之间发送实时消息或通知?

我正在编写一个 iOS 应用程序,其扩展名属于同一 App Group 并共享相同的 CoreData(SQLite 数据库)。我可以使用应用程序和扩展中的 CoreData 读取和写入数据库,它们共享相同的内容。

我的问题是:是否可以在应用程序和扩展程序之间发送消息或通知以通知对方在必要时进行更新?

我尝试通过 NSNotificationCenter 发送通知,但这并没有“超出”App/Extension,如果我尝试写入组共享 NSUserDefaults 和收听 NSUserDefaultsDidChangeNotification。这在应用程序内部工作,但扩展程序没有收到任何东西(当我知道它已启动并且它共享相同的 NSUserDefaults 时)。知道如何保持同步吗?

最佳答案

TLDR:不,但是有一个 hack

无论有没有扩展,iOS 应用程序都没有真正的进程间通信。 NSDistributedNotification 还没有完成从 OS X 到 iOS 的旅程,而且可能不会。

对于某些扩展类型,您可以通过 NSExtensionContext 打开 URL,并使用它们将数据传递给处理该 URL 的应用程序。这会将应用带到前台,这听起来不像您想要的那样。

不过,有一种 hack 方法可以满足您的需求。

  • 不要写入用户默认值,而是写入应用组目录中的文件。
  • 不要直接写入文件——使用 NSFileCoordinator 对文件进行协调写入。
  • 在想要了解文件更改的对象上实现 NSFilePresenter,并确保调用 [NSFileCoordinator addFilePresenter:someObject]
  • 在文件展示器上实现可选的 presentedItemDidChange 方法。

如果您做对了所有这些,您可以从应用程序或扩展程序写入此文件,然后在另一个应用程序中自动调用 presentedItemDidChange。作为奖励,您当然可以读取该文件的内容,因此您可以来回传递任意数据。

关于ios - iOS App Containing Extension 和 Extension (not Host App) 之间如何通信,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27011916/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com