CoreData:基础知识与关系扩展全解析
立即解锁
发布时间: 2025-08-25 02:26:18 阅读量: 4 订阅数: 17 

### Core Data:基础知识与关系扩展全解析
#### 1. Core Data基础中的属性依赖与重计算
在处理Core Data时,有时某个属性依赖于其他值,当这些值发生变化时,该属性需要重新计算。例如,对于`MythicalPerson`类,为了解决这个问题,需要实现一个小方法:
```objc
+ (NSSet *)keyPathsForValuesAffectingAwesomeness {
return [NSSet setWithObjects:@"divinity", @"power", @"goodness",
nil];
}
```
这个方法名是根据访问器名称动态构建的。在这个方法中,我们返回一个属性名称集合,这些属性是`awesomeness`属性所依赖的。这样,Core Data会在应用程序生命周期的早期自动调用这个方法,确保集合中任何属性的更改都会触发控制器更新与`awesomeness`属性绑定的对象。注意方法签名中的加号,这表明`keyPathsForValuesAffectingAwesomeness`是一个类方法,而不是实例方法,这是Cocoa键值观察系统的一部分。Cocoa KVO会查找这种结构的方法并在存在时调用它们。构建并运行应用程序后,当拖动其他滑块时,绿色进度条会相应改变。
#### 2. Core Data关系扩展的准备工作
在之前的基础上,我们要扩展数据模型,包含多个实体并定义它们之间的关系,同时创建一个GUI来显示和编辑这些关系。在开始之前,需要进行一些准备工作:
- 在Finder中复制上一版本的MythBase项目目录。
- 进入新目录,双击`MythBase.xcodeproj`在Xcode中打开项目。
#### 3. 数据模型的多版本准备
在对数据模型进行更改之前,需要处理数据迁移的问题。Core Data会在应用运行时检查数据模型版本,如果发现版本不匹配,会自动更新数据存储以匹配最新的数据模型。首先,要将当前模型转换为多版本格式:
- 在Xcode的导航面板中,打开`Models`组,选择`MythBase.xcdatamodeld`。
- 选择菜单中的`Editor ➤ Add Model Version`。
- 在弹出的对话框中,使用默认的新模型版本名称`MythBase 2`,然后点击`Finish`。此时,Xcode会复制一份数据模型,我们可以在扩展新模型的同时保留旧模型。
- 在导航面板中,点击`MythBase.xcdatamodeld`左侧的小三角,会看到两个版本的模型文件:`MythBase.xcdatamodel`和`MythBase 2.xcdatamodel`。
- 选择`MythBase.xcdatamodeld`文件,在文件检查器的`Versioned Core Data Model`部分,将当前版本设置为`MythBase 2`。这样,下次构建应用时,包含多个版本的复合模型将被复制到应用中,应用会使用我们设置的当前版本。
#### 4. 添加新实体
为了更好地管理神话相关数据,我们要添加三个新实体:`MythicalBand`、`MythicalVenue`和`MythicalGig`。具体操作如下:
| 实体名称 | 属性名称 | 属性类型 | 可选性 | 索引 |
| ---- | ---- | ---- | ---- | ---- |
| MythicalBand | name | String | 否 | 是 |
| MythicalVenue | name | String | 否 | 是 |
| MythicalGig | performanceDate | Date | 是 | 否 |
操作步骤:
- 确保选择了新的模型文件。
- 创建`MythicalBand`实体,添加`name`属性,设置类型为`String`,关闭可选性并开启索引。
- 创建`MythicalVenue`实体,添加`name`属性,设置类型为`String`,关闭可选性并开启索引。
- 创建`MythicalGig`实体,添加`performanceDate`属性,设置类型为`Date`,保持可选性开启,无需开启索引。
#### 5. 添加关系
接下来,我们要定义实体之间的关系,包括从`MythicalBand`到`MythicalPerson`、`MythicalBand`到`MythicalGig`以及`MythicalVenue`到`MythicalGig`的一对多关系。在Core Data中,每个关系实际上是单向的,要创建通常所说的一对多关系,需要创建一个从第一个实体到第二个实体的多对一关系和一个从第二个实体到第一个实体的一对一关系,并指定它们为逆关系。具体操作如下:
##### 5.1 MythicalBand到MythicalPerson的关系
- 选择`MythicalBand`,点击关系表视图左下角的小加号,创建一
0
0
复制全文
相关推荐










