一
- Managed Object Model(管理数据模型): 你可以将这个东西看作是数据库的轮廓,或者结构。这里包含了各个实体的定义信息,一般来说,你会使用我们刚刚看过的视觉编辑器来操作这个物体,添加属性,建立属性之间的关系等等,当然你也可以使用代码。
- Persistent Store Coordinator (持久性数据协调器): 你可以将这个东西看作是数据库连接库,在这里,你将设置数据存储的名字和位置,以及数据存储的时机。
- Managed Object Context (管理数据内容):你可以将这一部分看作是数据的实际内容,这也是整个数据库中对我们而言最重要的部分(这还用说),基本上,插入数据,查询数据,删除数据的工作都在这里完成。
建立实体, 建立relationship
Apple官方建议说,每当你建立一个目标关系时,最好建立一个返回的关系,所以我们就按照官方的指示做吧。
删除规则为“cascade//
如果你删除了其中一个数据,另一个实体中的数据也会跟着本删除
2.使app显示sql语句
-com.apple.CoreData.SQLDebug 1

3.
自动生成的模型文件
二 预加载/引入数据
- 在App启动的时候从外部文件引入数据,就是在程序开始运行的时候从外部的资源,比如SQLite数据库或者XML文件中,引入数据。
- 提供一个已经制作完成的SQLite数据库,首先制作一个像上次的教程说的那样的数据库模型,之后在这个模型中填充数据,填充数据的方式是使用一个utility app,这个utility app可以是一个使用Core Data API填充数据库的Mac或者iOS app,也可以是一些直接填充数据库的程序。一旦数据库被填充之后,你就可以在没有已存在的数据库的情况下设置这个数据库未使用的默认数据库。
Q:NSInvalidArgumentException', reason: 'Cannot create an NSPersistentStoreCoordinator
with a nil model'A: NSURL *modelURL = [NSURL fileURLWithPath:[path stringByAppendingPathExtension:@"mom"]];
add build Phase in Xcode 5.


- 载入json文件
- 解析json文件为一个数组
- 枚举这个数组将每一个实体(字典)创建一个managed Object
- 将所有的manged Object 存入core data
- [Banks enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop) {
- FailedBankInfo *failedBankInfo = [NSEntityDescription
- insertNewObjectForEntityForName:@"FailedBankInfo"
- inManagedObjectContext:context];
- failedBankInfo.name = [obj objectForKey:@"name"];
- failedBankInfo.city = [obj objectForKey:@"city"];
- failedBankInfo.state = [obj objectForKey:@"state"];
- FailedBankDetails *failedBankDetails = [NSEntityDescription
- insertNewObjectForEntityForName:@"FailedBankDetails"
- inManagedObjectContext:context];
- failedBankDetails.closeDate = [NSDate dateWithString:[obj objectForKey:@"closeDate"]];
- failedBankDetails.updateDate = [NSDate date];
- failedBankDetails.zip = [obj objectForKey:@"zip"];
- failedBankDetails.info = failedBankInfo;
- failedBankInfo.details = failedBankDetails;
- NSError *error;
- if (![context save:&error]) {
- NSLog(@"Whoops, couldn't save: %@", [error localizedDescription]);
- }
- }];
- // Test listing all FailedBankInfos from the store
- NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init];
- NSEntityDescription *entity = [NSEntityDescription entityForName:@"FailedBankInfo"
- inManagedObjectContext:context];
- [fetchRequest setEntity:entity];
- NSArray *fetchedObjects = [context executeFetchRequest:fetchRequest error:&error];
- for (FailedBankInfo *info in fetchedObjects) {
- NSLog(@"Name: %@", info.name);
- FailedBankDetails *details = info.details;
- NSLog(@"Zip: %@", details.zip);
- }
- 至此生成所需要的 sqlite数据库
- 将sqlite数据库设为默认数据库
persistentStoreCoordinator
方法,在
NSURL *storeURL = [[self app...
这一行的下面加入以下的代码:
if (![[NSFileManager defaultManager] fileExistsAtPath:[storeURL path]]) {
NSURL *preloadURL = [NSURL fileURLWithPath:[[NSBundle mainBundle] pathForResource:@"CoreDataTutorial2" ofType:@"sqlite"]];
NSError* err = nil;
if (![[NSFileManager defaultManager] copyItemAtURL:preloadURL toURL:storeURL error:&err]) {
NSLog(@"Oops, could copy preloaded data");
}
}