Core Data
最近我在公司的項目中接觸到了Core Data框架,決定深入了解一番。
我是按照Objccn.io上這篇博客的內(nèi)容一步一步寫的demo(根據(jù)從GitHub上下的demo看,原作者是大名鼎鼎的Chris Eidhof)。我把中間遇到的些問題,查找的資料和大家分享下。我最初是比較抵觸Core Data的,網(wǎng)上的吐槽也是隨處可見,希望大家能放下這種偏見潛心研究,定能發(fā)現(xiàn)Core Data的優(yōu)點。畢竟是蘋果爸爸的親兒子,10年前就出生了,而且蘋果一直在積極維護,在Mac開發(fā)上也有一席之地。
堆棧
關(guān)于在Xcode中如何創(chuàng)建Core Data數(shù)據(jù)庫、Core Data各個組件間的關(guān)系,網(wǎng)上資料很多了。我在實踐過程中把Core Data的創(chuàng)建和FMDB的創(chuàng)建做了一個類比。
首先看FMDB的創(chuàng)建過程(引用自[iOS]數(shù)據(jù)庫第三方框架FMDB詳細講解 作者:陳向陽哈)
//1.獲得數(shù)據(jù)庫文件的路徑
NSString *doc =[NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,NSUserDomainMask, YES) lastObject];
NSString *fileName = [doc stringByAppendingPathComponent:@“student.sqlite”];
//2.獲得數(shù)據(jù)庫
FMDatabase *db = [FMDatabase databaseWithPath:fileName];
//3.使用如下語句,如果打開失敗,可能是權(quán)限不足或者資源不足。通常打開完操作操作后,需要調(diào)用 close 方法來關(guān)閉數(shù)據(jù)庫。在和數(shù)據(jù)庫交互 之前,數(shù)據(jù)庫必須是打開的。如果資源或權(quán)限不足無法打開或創(chuàng)建數(shù)據(jù)庫,都會導(dǎo)致打開失敗。
if ([db open])
{
//4.創(chuàng)表
BOOL result = [db executeUpdate:@“CREATE TABLE IF NOT EXISTS t_student (id integer PRIMARY KEY AUTOINCREM ENT, name text NOT NULL, age integer NOT NULL);”];
if (result)
{
NSLog(@“創(chuàng)建表成功”);
}
}
FMDB需要一個.sqlite表文件存放的路徑,表結(jié)構(gòu)在sql語句中寫好了。
再看Core Data。
- (void)setUpManagedObjectContext {
self.managedObjectContext = [[NSManagedObjectContext alloc] initWithConcurrencyType:NSMainQueueConcurrencyType];
self.managedObjectContext.persistentStoreCoordinator = [[NSPersistentStoreCoordinator alloc] initWithManagedObjectModel:self.managedObjectModel];
NSError *error;
[self.managedObjectContext.persistentStoreCoordinator addPersistentStoreWithType:NSSQLiteStoreType configuration:nil URL:_storeUrl options:nil error:&error];
if (error) {
NSLog(@"coredata init fail: %@",error);
}
self.managedObjectContext.undoManager = [[NSUndoManager alloc] init];
}
- (NSManagedObjectModel *)managedObjectModel {
return [[NSManagedObjectModel alloc] initWithContentsOfURL:self.modelUrl];
}
Core Data需要兩個路徑,一個self.storeUrl就是類似FMDB的.sqlite文件存放路徑,另一個self.modelUrl就是我們創(chuàng)建的Company.xcdatamodeld經(jīng)過編譯后變成的.mmod路徑。
好了今天先到這。。。老婆催我睡覺。。。
先貼幾個有用的鏈接
*Core Data 概述
*iOS CoreData數(shù)據(jù)庫之創(chuàng)建詳解