CoreData进阶:从基础到关系建模与数据迁移
立即解锁
发布时间: 2025-08-25 02:25:08 阅读量: 2 订阅数: 8 


Mac平台Cocoa编程入门与实践
# Core Data 进阶:从基础到关系建模与数据迁移
## 1. Core Data 基础回顾与扩展
在 Core Data 的使用中,有时属性的值依赖于其他值,并且当这些值发生变化时需要重新计算。例如,在某个实体中,“awesomeness” 属性就依赖于 “divinity”、“power” 和 “goodness” 这几个属性。为了解决这个问题,我们可以在相关实体(如 MythicalPerson)中实现一个小方法:
```objc
+ (NSSet *)keyPathsForValuesAffectingAwesomeness {
return [NSSet setWithObjects:@"divinity", @"power", @"goodness",
nil];
}
```
这个方法名是根据访问器名称动态构建的。在这个方法中,我们返回了一个属性名称集合,这些属性是 “awesomeness” 属性所依赖的。这样,Core Data 会在应用程序生命周期的早期自动调用这个方法,并处理相关逻辑,使得集合中任何属性的更改都会触发控制器更新与 “awesomeness” 属性绑定的对象。需要注意的是,方法签名中的加号表示 `keyPathsForValuesAffectingAwesomeness` 是一个类方法,而不是实例方法,这是 Cocoa 键值观察系统的一部分。
构建并运行应用程序后,当拖动其他滑块时,绿色进度条会相应地改变,这表明我们的设置生效了。
## 2. 扩展数据模型:添加新实体
接下来,我们要对数据模型进行扩展,添加新的实体和它们之间的关系。具体来说,我们要添加三个新实体:MythicalBand、MythicalGig 和 MythicalVenue。
### 2.1 准备工作
首先,在 Finder 中复制上一个版本的 MythBase 项目目录,然后进入新目录,双击 `MythBase.xcodeproj` 在 Xcode 中打开项目。
### 2.2 添加新实体的步骤
- **MythicalBand**:
1. 确保选择了新的模型文件。
2. 创建一个新实体,命名为 “MythicalBand”。
3. 为该实体添加一个名为 “name” 的新属性,将其类型设置为 String。
4. 取消选中 “Optional” 复选框,并选中 “Indexed” 复选框。
- **MythicalVenue**:
1. 创建一个新实体,命名为 “MythicalVenue”。
2. 为该实体添加一个名为 “name” 的 String 类型属性。
3. 同样取消选中 “Optional” 复选框,选中 “Indexed” 复选框。
- **MythicalGig**:
1. 创建一个名为 “MythicalGig” 的实体。
2. 为其添加一个名为 “performanceDate” 的属性,将类型设置为 Date。
3. 可以将 “performanceDate” 设置为 Optional,并且无需开启索引。
以下是新实体及其属性的表格总结:
| 实体名称 | 属性名称 | 属性类型 | 是否可选 | 是否索引 |
| ---- | ---- | ---- | ---- | ---- |
| MythicalBand | name | String | 否 | 是 |
| MythicalVenue | name | String | 否 | 是 |
| MythicalGig | performanceDate | Date | 是 | 否 |
## 3. 添加实体间的关系
在 Core Data 中,关系实际上是单向的,通常我们所说的 “一对多”、“一对一”、“多对多” 关系,在 Core Data 中需要通过创建 “to-one” 或 “to-many” 关系来实现。为了创建双向关系,我们需要创建两个关系,并指定它们为反向关系。
### 3.1 从 MythicalBand 到 MythicalPerson 的一对多关系
- **创建正向关系**:
1. 选择 MythicalBand 实体。
2. 点击 Relationships 表格视图左下角的小 + 按钮,创建一个新关系。
3. 将关系命名为 “members”,将目标实体设置为 MythicalPerson。
4. 选中 “To-Many Relationship” 复选框,将删除规则设置为 Nullify(默认值)。
- **创建反向关系**:
1. 选择 MythicalPerson 实体。
2. 添加一个新关系,命名为 “memberOf”,将目标实体设置为 MythicalBand。
3. 将其反向关系设置为 “members”。
### 3.2 从 MythicalBand 到 MythicalGig 的一对多关系
- **创建正向关系**:
1. 选择 MythicalBand 实体。
2. 创建一个名为 “gigs” 的新关系,目标实体为 MythicalGig。
3. 选中 “To-Many Relationship” 复选框,将删除规则设置为 Cascade。
0
0
复制全文
相关推荐









