将 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
] 数组绑定到 NSArrayController
和 NSTableView
(一切都很好,除了现在我想在图片中引入持久存储)
现在是(两部分)问题:
1) 如果我用 CoreData 模型来表示这个结构 - 我如何表示 loan.address
路径的嵌套类结构?我在 CoreData 中只有 2 个实体(贷款和地址)并且两者之间存在一对一的关系吗?这是最佳做法吗?
2) 我对 CoreData 的理解是,CoreData 不是使用 [Loan]
的数组作为我的数据模型,而是新的数据模型(并将创建一个代表我的数据模式的托管对象,类似于我目前所拥有的我的class Loan
对象。我将在哪里定义我目前为我的Loan
和Address
类使用的方法?我需要在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]