Tag: 共享扩展

与CoreData Swift 3结合使用以接受文本和URL的共享扩展

正如我在先前有关操作扩展的博客中提到的那样,我正在创建默认Apple Notes应用程序的副本,其中还包括创建共享扩展名,该共享扩展允许我的Notes应用程序接受其他应用程序中的URL和文本。 这里的主要挑战是,我希望我的共享扩展名能够创建或添加到保存在CoreData中的现有笔记中。 整个项目可以位于此处(免责声明,我仍在对其进行调整): almusto / CustomNotes 通过在GitHub上创建一个帐户为CustomNotes开发做出贡献。 github.com 我做了很多的在线查找工作,但从未真正找到一个很好的例子说明我正在尝试做的事情。 其中一些方法包括在CoreDataStack的init中使用NotificationCenter并使用它来传递数据的方法,但是我发现了一种更简单且似乎很好的方法! 就像所有其他扩展程序一样,Share Extensions基本上是它们自己的应用程序,但是它们需要作为项目的一部分而不是独立的项目包含在内。 要在项目中创建共享扩展名,请转到文件->新建->目标,然后选择共享扩展名。 创建后将出现一个弹出窗口,询问您是否要使其激活。 这意味着在构建应用程序时,它将构建扩展而不是应用程序。 您可以选择否或是,然后手动更改要在Xcode左上方运行的内容: 如前所述,我在Notes应用程序中进行了股票扩展。 为了使这两个应用程序彼此通信,首先要做的是将您的应用程序和扩展名连接到同一应用程序组。 为此,请转到项目功能,然后将您的应用程序和扩展程序的“应用程序组”都打开,然后将它们添加到同一组中: 在共享扩展本身中,您会注意到它带有类型为SLComposeServiceViewController的ShareViewController,其中具有三个函数: isContentValid()->布尔 didSelectPost() configurationItems()-> [任何]! 为了解释这些功能,您可以使用Safari快速运行扩展,然后单击活动按钮时,应该看到扩展已加载,如下所示: 在不编写任何代码的情况下单击它之后,您将看到此消息: 如您所见,它就像是Safari中自己的小应用程序。 回到您可能已经猜到的三个函数,当您单击发布按钮时,didSelectPost()被触发。 isContentValid()实际上是在检查我们尝试与应用程序共享的内容是否为正确的类型。 此功能确定是否启用发布按钮。 最后,configurationItems()函数使我们能够将信息发布到特定对象。 在此示例中,我希望能够通过Core Data在CustomNotes应用程序中创建或添加到现有笔记中。 在开始在扩展程序中编写代码之前,让我们回到我的customNotes应用程序以提供一些上下文,并开始与扩展程序共享coreData的过程。 Core Data上还有其他资源,因此除了与共享扩展有关的需求之外,我将不做过多介绍。 我个人喜欢创建一个可以处理我所有核心数据需求的核心数据栈。 在此示例中,我的数据模型称为“ NotesModel”,它具有“ Note”类型的实体和两个属性。 一个叫做String的“ title”,另一个叫做Date的“ date”,在CoreData中实际上是NSDate类型。 以下是我的CoreDataStack: 现在,在此示例中,我只想允许我的notes应用程序接受URL和文本。 第一步是进入扩展程序的plist文件,并将NSExtensionActivationRule更改为字典,然后将NSExtensionActivationSupportsWebPageWithMaxCount作为数字添加为1,将NSExtensionActivationSupportsText作为布尔值添加为YES。 同样,当我们在这里时,您可以将Bundle显示名称更改为所需的名称,因为此名称是设置活动控制器时实际显示的名称。 现在,在我们的ShareViewController中,我们创建一些变量来保存数据。 一方面,我希望变量保留我的网址信息,在我的示例中,我只希望该网址为字符串。 另外,如果我只是想共享文本,我希望有一个变量可以保留该文本。 一定要在底部启用这个小的选择注释选项,我们需要使用我们的configurationItem函数,但是我们想用CoreData中的注释填充它,因此让我们向ShareViewController添加一些属性。 一个用来存储我们所有的笔记,一个用来创建我们的CoreDataStack实例,另一个用来保存我们选择要发布到的笔记的值。 var selected注意:注意! […]