如何在iOS App App Extension和Extension(不是主机应用)之间进行通信

前端之家收集整理的这篇文章主要介绍了如何在iOS App App Extension和Extension(不是主机应用)之间进行通信前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
TLDR:是否可以在iOS应用程序和扩展程序之间发送实时消息或通知

我正在编写一个具有扩展名的iOS应用程序,它是同一个App Group的一部分,并且共享相同的CoreData(sqlite数据库).我可以使用CoreData从应用程序和扩展名读写数据库,它们都共享相同的内容.

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

我尝试通过NSNotificationCenter发送通知,但是如果我尝试写入共享NSUserDefaults的组,并且收听NSUserDefaultsDidChangeNotification,那么这个问题不会在App / Extension中出现.这在App内部工作,但扩展名没有收到任何东西(当我知道它被启动并且共享相同的NSUserDefaults)时.任何想法如何保持同步?

解决方法

TLDR:不,但是有一个黑客

iOS应用没有真正的进程间通信,有或没有扩展. NSDistributedNotification仍然没有从OS X到iOS的旅程,可能不会.

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

有一个黑客可能会让你得到你所需要的东西.

>而不是写入用户默认值,写入您的应用程序组目录中的文件.
>不要直接写文件 – 使用NSFileCoordinator对文件进行协调写入.
>在想知道文件更改的对象上实现NSFilePresenter,并确保调用[NSFileCoordinator addFilePresenter:someObject]
>在你的文件主持人上实现可选的itemsItemDidChange方法.

如果您执行所有这些权限,您可以从应用程序或扩展名写入此文件,然后在另一个中自动调用presentItemDidChange.作为一个奖励,你当然可以读取该文件内容,所以你可以传递任意数据来回.

原文链接:https://www.f2er.com/iOS/337548.html

猜你在找的iOS相关文章