将 swift 3 项目转换为使用 CoreData

Posted

技术标签:

【中文标题】将 swift 3 项目转换为使用 CoreData【英文标题】:converting swift 3 project to use CoreData 【发布时间】:2016-11-30 15:11:35 【问题描述】:

我对 Swift 和 Cocoa 世界比较陌生,很想听听人们对以下方面设计数据模型的最佳方式的看法:

我目前有一个 macOS 原型项目,它具有以下(简化的)数据模型:

class Loan: NSObject, XMLParseDelegate 
   var id: Int
   var address: Address
   // ... other properties and methods
   func parseZillow() 
   // bunch of code, etc
   

其中Address 是另一个具有自己的属性和方法的类结构。然后,我使用 Cocoa Bindings 将 [Loan] 数组绑定到 NSArrayControllerNSTableView(一切都很好,除了现在我想在图片中引入持久存储)

现在是(两部分)问题:

1) 如果我用 CoreData 模型来表示这个结构 - 我如何表示 loan.address 路径的嵌套类结构?我在 CoreData 中只有 2 个实体(贷款和地址)并且两者之间存在一对一的关系吗?这是最佳做法吗?

2) 我对 CoreData 的理解是,CoreData 不是使用 [Loan] 的数组作为我的数据模型,而是新的数据模型(并将创建一个代表我的数据模式的托管对象,类似于我目前所拥有的我的class Loan 对象。我将在哪里定义我目前为我的LoanAddress 类使用的方法?我需要在MO 之上创建一个包装类吗?我看过一堆教程但这部分我还是不清楚

【问题讨论】:

警告:Core Data 不是初学者技术。 【参考方案1】:

    是的,您可以有两个实体,贷款和地址。如果每个贷款有一个地址并且每个地址有一个贷款,则关系是一对一的。如果一个地址可以有多个贷款,则关系是多对一的。

    来自Creating and Saving Managed Objects

创建 NSManagedObject 子类

默认情况下,Core Data 会将 NSManagedObject 实例返回给您的应用程序。但是,为模型中的每个实体定义 NSManagedObject 的子类很有用。具体来说,当您创建 NSManagedObject 的子类时,您可以定义实体可用于代码完成的属性,您可以为这些子类添加便利方法。

要创建 NSManagedObject 的子类,在 Xcode 的核心数据模型编辑器中,选择实体,然后在数据模型检查器的实体窗格中,在类字段中输入名称。然后在 Xcode 中创建子类(AAAEmployeeMO)。

“创建 NSManagedObject 子类...”在编辑器菜单中。您可以一次创建所有子类。您可以将您的方法添加到 NSManagedObject 子类中。

【讨论】:

以上是关于将 swift 3 项目转换为使用 CoreData的主要内容,如果未能解决你的问题,请参考以下文章

获取“无法打开应用程序,因为您无权查看它。 “将项目代码从swift 2.2转换为swift 3.0之后

Alamofire - 从 Swift 2 转换为 Swift 3 时出错

Swift 4.1 - 无法将 [Character] 类型的值转换为 [String]

将 json 和 HTTP“post”代码转换为 Swift 3 时出错

转换为 Swift 3.0 时出现多个问题

Swift 3.0 转换错误