ios - 在 Swift 中使用自定义模型将 CoreData 模型添加到现有项目的最佳方法

标签 ios swift core-data swift4

我有一个包含现有自定义模型的项目,该项目以 JSON 格式从 rest api(或 nsurlcache)获取数据,但现在我需要添加一个 CoreData 模型。关于如何最好地将我的模型“合并”到新的 CoreData NSManagedObject 模型,我得到了相互矛盾的信息。

执行此操作最合理、最干净的方法是什么?

我遇到的一些问题是我的自定义模型一开始是/是一个结构,而不是类,不过这不是什么大问题。

接下来是事实,我在这里有很多“存储的属性”,我在 CoreData 模型的扩展中创建这些时遇到了问题。我需要它们(或替代品),因为有很多自定义格式的数据添加到 CoreData 模型中是多余的,但目前以非常清晰的方式作为属性存在。我试图将它添加到主类文件中,但是,我在很多地方读到最好的办法是创建您自己的自定义扩展类(甚至不更改自动生成的 stub 扩展)。但是我确实收到一个错误,我无法将存储的属性添加到扩展中。我是否应该诉诸于将所有这些更改为功能?这看起来很脏。

最后,总的来说,从现在开始我应该如何组织我的模型?我所有的自定义函数都应该保存在我自己的(不是自动生成的)扩展文件中吗?扩展文件通常是为每个模型还是一个集群创建一个(如果它们是短的和相关的模型)?是否应该将任何东西手动添加到 +CoreDataClass 或 +CoreDataProperties?

最佳答案

您的矛盾信息是什么?

您需要考虑存储属性的用例。

CoreData 对象支持 2 种不同类型: transient 属性(不会存储在持久存储中)和将存储在持久存储中的非 transient 属性。这样您就可以开始设置模型设计了。不过两者都需要在模型中。

对不会对应用性能产生负面影响的事物使用更多计算属性。那些你可以放在扩展中。其他人需要在模型中,在从您的源导入时计算一次。

在您的情况下,计算属性可能如下所示:(考虑到您有一个 NSManaged var eventDate

var formattedEventDate: String? {
    let dateFormatter = DateFormatter()
    //... set desired format/locale
    return dateFormatter.string(from: eventDate)
}

关于ios - 在 Swift 中使用自定义模型将 CoreData 模型添加到现有项目的最佳方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52282203/

相关文章:

ios - 在 App Delegate 中设置 Init VC?

ios - 自定义Segue正确方法

iOS 应用程序 - 从 POD 安装 SDK 后应用程序的大小太大

ios - FBSDKShareDialog 在应该发布时取消

objective-c - 在 Objective-C 的函数签名中添加参数

ios - 核心数据 Xcode 8

iphone - 如何确保核心数据获取属性是从上下文而不是缓存中获取的?

ios - NSPathStore2 的 UIImageView 实例泄露

swift - 如何将 array.withUnsafeMutableBufferPointer 从 swift 2 迁移到 swift 3?

iphone - 共享核心数据和图像到 iCloud