CoreData开发指南:项目与任务管理及数据模型版本控制
立即解锁
发布时间: 2025-08-21 01:59:26 阅读量: 2 订阅数: 9 

### Core Data 开发指南:模型创建、使用与版本管理
#### 1. 核心代码概述
在开发过程中,我们会涉及到多个类和文件,以下是主要的代码文件及其功能:
| 文件名称 | 功能描述 |
| ---- | ---- |
| `AppDelegate.h` | 应用委托的头文件,声明了应用窗口属性。 |
| `AppDelegate.m` | 应用委托的实现文件,负责创建应用模型实例、项目和任务,并将任务添加到项目中,最后获取并打印所有项目的内容。 |
| `AppModel.h` | 应用模型的头文件,定义了数据存储 URL、管理对象模型、持久存储协调器、管理对象上下文等属性,以及创建项目、工人和任务的方法。 |
| `AppModel.m` | 应用模型的实现文件,实现了创建项目、工人和任务的具体逻辑,以及获取数据存储 URL、管理对象模型、持久存储协调器和管理对象上下文的方法。 |
| `Project.h` | 项目类的头文件,定义了项目的属性和方法。 |
| `Project.m` | 项目类的实现文件,使用 `@dynamic` 关键字声明属性。 |
| `Worker.h` | 工人类的头文件,定义了工人的属性和方法。 |
| `Worker.m` | 工人类的实现文件,使用 `@dynamic` 关键字声明属性。 |
| `Task.h` | 任务类的头文件,定义了任务的属性和方法。 |
| `Task.m` | 任务类的实现文件,使用 `@dynamic` 关键字声明属性。 |
#### 2. 代码实现细节
##### 2.1 `AppDelegate.m` 代码
```objc
#import "AppDelegate.h"
@implementation AppDelegate
@synthesize window = _window;
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
// 创建一个新的 AppModel 实例
AppModel *dataModel = [[AppModel alloc] init];
// 创建一个项目
Project *p1 = [dataModel makeNewProject];
p1.name = @"Proj1";
// 创建一个任务
Task *t1 = (Task *)[NSEntityDescription insertNewObjectForEntityForName:@"Task" inManagedObjectContext:[dataModel managedObjectContext]];
t1.name = @"Task 1";
t1.details = @"Task details";
t1.dueDate = [NSDate date];
t1.priority = [NSNumber numberWithInt:1];
// 将任务添加到项目中
[p1 addlistOfTasksObject:t1];
// 创建另一个任务
Task *t2 = (Task *)[NSEntityDescription insertNewObjectForEntityForName:@"Task" inManagedObjectContext:[dataModel managedObjectContext]];
t2.name = @"Task 2";
t2.details = @"Task details";
t2.dueDate = [NSDate date];
t2.priority = [NSNumber numberWithInt:1];
// 将任务添加到项目中
[p1 addlistOfTasksObject:t2];
// 获取数据存储中的所有项目
NSFetchRequest *request = [[NSFetchRequest alloc] init];
NSEntityDescription *entity = [NSEntityDescription entityForName:@"Project" inManagedObjectContext:[dataModel managedObjectContext]];
request.entity = entity;
NSArray *listOfProjects = [[dataModel managedObjectContext] executeFetchRequest:request error:nil];
// 打印所有项目的内容(包括任务)
NSLog(@"-----");
NSLog(@"NEW PROJECTS IN CONTEXT");
[listOfProjects enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop) {
NSLog(@"project.name = %@", [obj name]);
[[obj listOfTasks] enumerateObjectsUsingBlock:^(id obj, BOOL *stop) {
NSLog(@" task.name = %@", [obj name]);
}];
}];
self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
self.window.backgroundColor = [UIColor whiteColor];
[self.window makeKeyAndVisible];
return YES;
}
@end
```
##### 2.2 `AppModel.m` 代码
```objc
#import "AppModel.h"
@implementation AppModel
NSManagedObjectModel *_managedObjectModel;
NSPersistentStoreCoordinator *_persistentStoreCoordinator;
NSManagedObjectContext *_managedObjectContext;
- (Project *)makeNewProject {
Project *managedProject = (Project *)[NSEntityDescription insertNewObjectForEntityForName:@"Project" inManagedObjectContext:[self managedObjectContext]];
managedProject.name = @"New Project";
managedProject.descrip = @"This is a new project";
managedProject.dueDate = [NSDate date];
managedProject.personInCharge = [self makeNewWorker];
return managedProject;
}
- (Worker *)makeNewWorker {
Worker *managedWorker = (Worker *)[NSEntityDescription insertNewObjectForEntityForName:@"Worker" inManagedObjectContext:[self managedObjectContext]];
managedWorker.name = @"New Worker";
managedWorker.Role = @"Works on projects";
return managedWorker;
}
- (Task *)makeNewTask {
Task *managedTask = (Task *)[NSEntityDescription insertNewObjectForEntityForName:@"Task" inManagedObjectContext:[self managedObjectContext]];
managedTask.name = @"New Task";
managedTask.detail
```
0
0
复制全文
相关推荐










