在共享的 Swift App 框架中使用 Core Data

Posted

技术标签:

【中文标题】在共享的 Swift App 框架中使用 Core Data【英文标题】:Using Core Data in a shared Swift App Framework 【发布时间】:2015-04-11 17:55:37 【问题描述】:

我有一个应用程序框架,其中包含我的核心数据对象,这些对象使用共享的应用程序组在 iPhone 应用程序和 WatchKit 应用程序扩展之间共享。

从 iPhone 应用程序调用时,框架及其核心数据代码都可以完美运行,但是当我通过 WatchKit 扩展获取我的对象以填充手表时,核心数据只返回我的数据的一个子集。

我已经设法解决了一个未知问题,其中记录定义了一对多子关系(发布 [1...*] 回复)。从 WatchKit 代码调用框架时,将返回所有帖子,直到遇到具有一个或多个回复子的帖子。它返回该帖子(以及任何后续的无回复帖子),但不返回回复,之后也没有帖子。当从 iPhone 代码调用框架时,它可以正常工作并返回所有帖子及其回复。

几天来,我一直在努力追查问题,但在从 WatchKit 扩展调用时无法让框架输出任何类型的日志记录或断点。

我尝试重新创建模型,但行为没有改变。我已经删除了 Core Data 类前缀(例如 AppFramework.LocalPost),而是使用了@objc,所以我在框架中的类目前是这样定义的

import Foundation
import CoreData

@objc(LocalPost)
public class LocalPost: NSManagedObject 
    ...



import Foundation
import CoreData

@objc(LocalPostReply)
public class LocalPostReply: NSManagedObject 
    ...

但我所做的一切都没有帮助。从 WatchKit 扩展调用的代码根本不喜欢回复。

任何人都遇到过类似的问题,有关于如何进一步解决此问题的提示吗?

【问题讨论】:

【参考方案1】:

好吧,经过几天的反复试验,我终于找到了可行的方法。我必须将两个方向的关系设置为可选,即使回复总是有一个 Post 父级。不知道为什么会修复它,或者为什么它只在 WatchKit 扩展中存在问题,但现在一切正常。

【讨论】:

以上是关于在共享的 Swift App 框架中使用 Core Data的主要内容,如果未能解决你的问题,请参考以下文章

Swift 3 XMPP框架在XMPPMessageArchiving_Message_CoreDataObject中正确使用了willInsert()和didUpdate()

Swift - 如何像在 App Store 中一样共享应用链接

App Delegate 中 Core Data 堆栈变量中的 Swift 语法歧义

在 Swift 中的主 App 和 Today 小部件/扩展之间共享 UI 元素

Swift 在 App 和 Today Extension 之间共享 CoreData [重复]

如何与框架项目swift共享父(主机)项目pod?