Core Data

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)建詳解

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容