CoreData(二)---創(chuàng)建stack

1.Core Data classes

NSManagedObjectModel:用來(lái)創(chuàng)建數(shù)據(jù)模型,存儲(chǔ)屬性和保存數(shù)據(jù)。有個(gè)特殊的 編譯器momc把工程的.xcdatamodel的文件編輯為一組momd文件 coredata用這組momd文件來(lái)初始化NSManagedObjectModel

NSPersistentStore: 對(duì)存儲(chǔ)區(qū)進(jìn)行讀寫操作。Coredata可根據(jù)需要將數(shù)據(jù)保存為指定的方 式包括NSQLiteStoreType、NSXMLStoreType、NSBinaryStoreType、NSInMemoryStoreType。根據(jù)名稱可以看出保存的文件類型。大部分使用的是sqlite類型也是默認(rèn)類型,是唯一的非原子類型(non- atomic),其他的三種都為原子類型(atomic)。InMemory類型不能對(duì)數(shù)據(jù)進(jìn)行持久化保存只是保存在內(nèi)存中,其他三種可以。

NSPersistentStoreCoordinator:NSPersistentStoreCoordinator將object model和persistent store進(jìn)行關(guān)聯(lián)。向object model發(fā)送信息及從persistent store獲取信息

NSManagedObjectContext: 用到的最多的一個(gè)類Coredata的大部分操作都用NSManagedObjectContext來(lái)完成在內(nèi)存中保存只有調(diào)用save()方法的時(shí)候才會(huì)將數(shù)據(jù)保存到disk。每個(gè)managed object都必須擁有一個(gè)context,并一直保持對(duì)他的引用。一個(gè)程序可以有多個(gè)context,可以使用context同時(shí)對(duì)Coredata進(jìn)行操作。

2.手動(dòng)創(chuàng)建CoreData(在創(chuàng)建項(xiàng)目的時(shí)候不勾選CoreData 而是自己創(chuàng)建)

let modelName = "My Coredata"
    private lazy var applicationDocumentsDirectory: NSURL = {
    let urls = NSFileManager.defaultManager().URLsForDirectory(
    .DocumentDirectory, inDomains: .UserDomainMask)
    return urls[0]
    }()
    
    //創(chuàng)建NSManagedObjectContext
    lazy var context: NSManagedObjectContext = {
        var managedObjectContext = NSManagedObjectContext(
        concurrencyType: .MainQueueConcurrencyType)
    
    managedObjectContext.persistentStoreCoordinator = self.persistentStoreCoordinator
    return managedObjectContext
    }()
    //創(chuàng)建NSPersistentStoreCoordinator
    private lazy var persistentStoreCoordinator: NSPersistentStoreCoordinator = {
        let coordinator = NSPersistentStoreCoordinator(managedObjectModel: self.managedObjectModel)
        let url = self.applicationDocumentsDirectory.URLByAppendingPathComponent(self.modelName)
        do {
            let options = [NSMigratePersistentStoresAutomaticallyOption : true]
            try coordinator.addPersistentStoreWithType( NSSQLiteStoreType, configuration: nil, URL: url, options: options)
    } catch {
            print("Error adding persistent store.")
        }
        return coordinator
    }()
    
    //創(chuàng)建NSManagedObjectModel
    private lazy var managedObjectModel: NSManagedObjectModel = {
        let modelURL = NSBundle.mainBundle().URLForResource(self.modelName,
        withExtension: "momd")!
        return NSManagedObjectModel(contentsOfURL: modelURL)!
    }()

  //將數(shù)據(jù)保存
   func saveContext () {
      if context.hasChanges {
         do {
               try context.save()
             } catch let error as NSError {print("Error: \(error.localizedDescription)")abort()
         }
       }
    }

注:lazy延遲屬性只有在使用該變量的時(shí)候才會(huì)進(jìn)行初始化。大括號(hào)里面是一個(gè)block,將處理結(jié)果返回給變量給變量賦值

3.使用

//獲取上面創(chuàng)建的contex
func application(application: UIApplication,didFinishLaunchingWithOptionslaunchOptions: [NSObject: AnyObject]?) -> Bool {
let navigationController =window!.rootViewController as! UINavigationController
let viewController =navigationController.topViewController as! ViewController
viewController.managedContext = coreDataStack.context
return true
}

//進(jìn)入后臺(tái)時(shí)保存數(shù)據(jù)
func applicationDidEnterBackground(application: UIApplication) {
coreDataStack.saveContext()
}

注:數(shù)據(jù)的保存和讀取與CoreData(一)中的方法相同 只是自己創(chuàng)建了context而不是使用Appdelegate中自動(dòng)創(chuàng)建的context。

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

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

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