CoreData就是對(duì)象模型和關(guān)系模型的互轉(zhuǎn)榜轿,如下圖:
模型文件:
在Core Data谬盐,需要進(jìn)行映射的對(duì)象稱為實(shí)體(entity)甸私;下面新建一個(gè)模型文件:
程序步驟:
1.新建模型文件
2.上代碼
property(nonatomic, strong) NSManagedObjectContext *context;
初始化上下文:
?NSManagedObjectModel *model = [NSManagedObjectModel mergedModelFromBundles:nil];
? ? NSPersistentStoreCoordinator *psc = [[NSPersistentStoreCoordinator alloc] initWithManagedObjectModel:model];
? ? // 構(gòu)建SQLite數(shù)據(jù)庫文件的路徑
? ? NSString *docs = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) lastObject];
? ? NSURL *url = [NSURL fileURLWithPath:[docs stringByAppendingPathComponent:@"person.data"]];
?? ? NSLog(@"%@",url);
? ? // 添加持久化存儲(chǔ)庫,這里使用SQLite作為存儲(chǔ)庫
? ? NSError*error =nil;
? ? NSPersistentStore *store = [psc addPersistentStoreWithType:NSSQLiteStoreType configuration:nil URL:url options:nil error:&error];
? ? if(store ==nil) {// 直接拋異常
? ? ? ? [NSException raise:@"添加數(shù)據(jù)庫錯(cuò)誤" format:@"%@", [error localizedDescription]];
? ? }
? ? // 初始化上下文飞傀,設(shè)置persistentStoreCoordinator屬性
? ? NSManagedObjectContext *context = [[NSManagedObjectContext alloc] initWithConcurrencyType:0];
? ? self.context= context;
? ? context.persistentStoreCoordinator = psc;
插入數(shù)據(jù):
-(void)addinto{
? ? // 傳入上下文皇型,創(chuàng)建一個(gè)Person實(shí)體對(duì)象
? ? NSManagedObject *person = [NSEntityDescription insertNewObjectForEntityForName:@"Person" inManagedObjectContext:self.context];
? ? // 設(shè)置Person的簡(jiǎn)單屬性
? ? [personsetValue:@"MJ"forKey:@"name"];
? ? [personsetValue:[NSNumber numberWithInt:27] forKey:@"age"];
? ? // 傳入上下文,創(chuàng)建一個(gè)Card實(shí)體對(duì)象
? ? NSManagedObject *card = [NSEntityDescription insertNewObjectForEntityForName:@"Card" inManagedObjectContext:self.context];
? ? [cardsetValue:@"4414241933432" forKey:@"no"];
? ? // 設(shè)置Person和Card之間的關(guān)聯(lián)關(guān)系
? ? [personsetValue:cardforKey:@"card"];
? ? // 利用上下文對(duì)象助析,將數(shù)據(jù)同步到持久化存儲(chǔ)庫
? ? NSError*error =nil;
? ? BOOLsuccess = [self.contextsave:&error];
? ? if(!success) {
? ? ? ? [NSException raise:@"訪問數(shù)據(jù)庫錯(cuò)誤" format:@"%@", [error localizedDescription]];
? ? }
}
查詢:
-(void)query{
? ? // 初始化一個(gè)查詢請(qǐng)求
? ? NSFetchRequest *request = [[NSFetchRequest alloc] init];
? ? // 設(shè)置要查詢的實(shí)體
? ? request.entity = [NSEntityDescription entityForName:@"Person" inManagedObjectContext:self.context];
? ? // 設(shè)置排序(按照age降序)
? ? NSSortDescriptor *sort = [NSSortDescriptor sortDescriptorWithKey:@"age" ascending:NO];
? ? request.sortDescriptors = [NSArray arrayWithObject:sort];
? ? // 執(zhí)行請(qǐng)求
? ? NSError*error =nil;
? ? NSArray*objs = [self.contextexecuteFetchRequest:requesterror:&error];
? ? if(error) {
? ? ? ? [NSException raise:@"查詢錯(cuò)誤" format:@"%@", [error localizedDescription]];
? ? }
? ? // 遍歷數(shù)據(jù)
? ? for (NSManagedObject *obj in objs) {
? ? ? ? NSLog(@"name=%@", [objvalueForKey:@"name"]);
? ? ? ? ? ? ? }
}