数据模型创建指南
立即解锁
发布时间: 2025-08-26 00:46:12 阅读量: 3 订阅数: 15 


Core Data深入浅出:从入门到精通
### 数据模型创建指南
#### 1. 实体与属性操作
- **实体定义与自定义类**:实体由其名称定义。默认情况下,每个实体的实例在运行时由 `NSManagedObject` 类型的对象表示。随着项目的发展,你可以创建自定义类来表示托管对象,自定义托管对象必须继承自 `NSManagedObject`,并在实体详细信息面板的“Class”字段中指定自定义对象类名。
- **创建实体**:在 Xcode 中,点击“Entity”部分下方的“Add Entity”按钮,为实体命名即可添加实体。
- **查看和编辑属性详细信息**:在 Xcode 的数据建模工具中间列的“Attributes”部分选择一个属性,可切换详细信息面板以显示属性详细信息。属性有多个属性字段,具体含义如下表所示:
| Name | Description |
| --- | --- |
| Name | 属性的名称 |
| Transient | 告诉 Core Data 不持久化此属性,与第二个属性结合使用以支持非标准或自定义类型 |
| Optional | 可选属性可以有 `nil` 值,非可选属性必须有非 `nil` 值 |
| Indexed | 索引属性搜索速度更快,但在持久存储中占用更多空间 |
| Attribute Type | 属性的类型,所选值会改变显示的验证字段 |
| Validation | 用于字符串类型属性的最小/最大长度字段,或数值类型属性的最小/最大值字段 |
| Min Length | 启用最小长度验证的复选框 |
| Max Length | 启用最大长度验证的复选框 |
| Minimum | 启用最小值验证的复选框 |
| Maximum | 启用最大值验证的复选框 |
| Default Value | 当未为属性提供值时的默认值 |
| Reg. Ex. | 用于验证数据的正则表达式 |
#### 2. 关系操作
- **查看和编辑关系详细信息**:点击关系可查看其详细信息。关系有多个属性,包括名称、目标实体、反向关系等。
- **名称(Name)**:成为 `NSManagedObject` 引用关系的键名。按惯例,对于一对一关系,是引用实体的小写名称;对于多对多关系,名称通常为复数形式。
- **目标(Destination)**:指定关系另一端的实体。
- **反向(Inverse)**:允许从目标实体的角度选择相同的关系。应在两个相关实体中创建关系,设置名称和目标,然后在一个实体中选择正确的反向关系。若不指定反向关系,会有编译器警告,可能导致意外后果。
- **临时(Transient)**:勾选此复选框表示关系在保存操作时不存储到持久存储中。适用于临时关系或可从外部数据源派生的关系信息。
- **可选(Optional)**:复选框指定此关系是否需要非 `nil` 值。若勾选,该实体类型的托管对象可以在未指定此关系的情况下保存到持久存储;否则,保存上下文将失败。
- **多对多关系(To - Many Relationship)**:复选框,未勾选时关系为一对一,勾选表示目标实体可以有多个与该实体类型的托管对象实例相关的托管对象。
- **计数(Count,Minimum 和 Maximum)**:仅在勾选“To - Many Relationship”复选框时生效,设置目标实体类型的托管对象与该实体类型的每个托管对象相关的数量限制。超出限制会导致保存操作失败。
- **删除规则(Delete Rule)**:指定尝试删除此实体类型的托管对象时对目标对象的处理方式,有 No Action、Nullify、Cascade 和 Deny 四种选项。
以下是关系操作的流程图:
```mermaid
graph LR
A[选择关系] --> B{设置关系属性}
B --> C[设置名称]
B --> D[设置目标实体]
B --> E[设置反向关系]
B --> F{是否临时关系}
F -- 是 --> G[勾选 Transient]
F -- 否 --> H[不勾选 Transient]
B --> I{是否可选关系}
I -- 是 --> J[勾选 Optional]
I -- 否 --> K[不勾选 Optional]
B --> L{是否多对多关系}
L -- 是 --> M[勾选 To - Many Relationship]
L -- 否 --> N[不勾选 To - Many Relationship]
M --> O[设置计数限制]
B --> P[设置删除规则]
```
#### 3. 使用获取属性
获取属性类似于关系,允许对象引用其他对象,但通过谓词识别目标对象。例如,在 League Manager 应用中,可在 `Team` 实体中创建获取属性 `wPlayers` 以返回姓氏以字母 `W` 开头的所有球员。操作步骤如下:
1. 选择 `Team`
0
0
复制全文
相关推荐










