【问题标题】:Best approach to adding CoreData model to existing project with custom models in Swift在 Swift 中使用自定义模型将 CoreData 模型添加到现有项目的最佳方法
【发布时间】:2018-09-11 18:34:33
【问题描述】:

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

最合理和最干净的方法是什么?

我遇到的一些问题是我的自定义模型最初是/是一个结构,而不是类,但这并不是什么大问题。

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

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

【问题讨论】:

    标签: ios swift core-data swift4


    【解决方案1】:

    您的冲突信息是什么?

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

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

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

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

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

    【讨论】:

    • 好吧,假设我有一个返回 fullName 的字段(结合两个属性 firstName 和 lastName) - 我假设这将是一个临时属性?例如,基于本地化的自定义格式化 eventDate 也可以作为瞬态属性应用?在这种情况下,我在哪里为瞬态属性、生成的类或我自己的自定义扩展定义 getter/setter?同样的问题也适用于自定义 fetching/init/getDataFromAPI 函数。我是只将所有新功能添加到我自己的新扩展文件中,还是在某些情况下最好更改主文件?
    • 您能否提供一个示例,说明您最后提到的将什么更好地存储为计算属性?
    • 当然,假设您有一个具有某些存储属性的模型,您想使用它来使用 NSPredicate 搜索此对象,因为这不适用于计算属性。但是在 UI 中,您希望拥有各种不同的字符串格式,例如 - 您将使用计算属性。但是,如果计算时间过长(例如复杂的正则表达式在一个巨大的字符串上),您可能必须避免这种情况并存储该值,因为它会影响您的滚动性能。
    • 非常感谢。介意在第一条评论中分享您对我的问题的想法吗?
    • 不,您应该避免修改这些文件。在大多数情况下,瞬态属性不是必需的。 Get datafromAPI 根本不应该在您的模型中。创建一个带有响应解析器的 APIClient 以导入 coredata。但这将是一个单独的问题......
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-04-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-09-06
    相关资源
    最近更新 更多