带有共享CoreData的Xcode项目,适用于iOS和MacOS目标

时间:2018-11-13 19:15:14

标签: swift xcode core-data

几个月前,我开始研究需要CoreData实现的MacOS应用程序。今天,我开始研究基于相同Api且依赖于相同模型的相关iOS应用程序。我在项目中添加了iOS目标,并且互通了一些类(通过将它们添加到两个目标中),包括CoreData Stack:

  1. 我在两个目标上都添加了app.xcdatamodeld

  2. 我在两个目标上都添加了Object+CoreDataClass.swiftObject+CoreDataProperties.swift

enter image description here

  1. 我修改了ManagedObjectsController以支持iOS和MacOS实施

enter image description here

通过为iOS和OSX定义appDelegate,我可以用相同的方式访问它以获得上下文let context = appDelegate.persistentContainer.viewContext

工作正常,但我想知道我是否做对了。这是在两个目标之间相互访问appDelegate实例的正确方法吗?

我应该使用某种协议和通用类型吗?

还是应该为每个目标简单地构建ManagedObjectController?

谢谢

1 个答案:

答案 0 :(得分:1)

如果您有多个要都支持通用功能的类,则声明协议会很有帮助。但是在这种情况下, UIApplication NSApplication 已经支持您所需的常用功能!问题在于您需要访问两个不同的全局符号。

值得考虑的另一种选择是:声明一个类 AppDelegate ,然后移动那个脏的{而不是声明两个 IosAppDelegate MacAppDelegate 类。 {1}}代码从您的 ManagedObjectsController 类中输入并进入 AppDelegate 中。然后,可以在需要引用共享应用程序委托的任何地方使用此 AppDelegate 。在大多数项目中,这不只几个地方。

但是,如果您想尽快将产品推出市场,并且此 ManagedObjectsController 是唯一需要共享应用程序委托的地方,那么您的代码就可以了。