CoreData(二)—创建stack

1.Core Data classes

NSManagedObjectModel:用来创造数据模型,存储属性和封存数据。有个独特之
编译器momc把工程的.xcdatamodel的公文编制也同组momd文件
coredata用当下组momd文件来初始化NSManagedObjectModel

NSPersistentStore:
对存储区进行读写操作。Coredata可根据需要以数据保存也指定的方
式包括NSQLiteStoreType、NSXMLStoreType、NSBinaryStoreType、NSInMemoryStoreType。根据名称可以观看保存之文件类型。大部分用到的凡sqlite类型也是默认类型,是唯一的非原子类型(non-
atomic),其他的老三种植都为原子类型(atomic)。InMemory类型不可知针对数码进行持久化保存只是保存在内存中,其他三种可以。

NSPersistentStoreCoordinator:NSPersistentStoreCoordinator将object
model和persistent store进行关联。向object model发送信息及自persistent
store获取信息

NSManagedObjectContext:
用到的绝多之一个类Coredata的大多数操作都为此NSManagedObjectContext来好在内存中保存只有调用save()方法的时光才会用数据保存到disk。每个managed
object都须具备一个context,并直维系对客的援。一个先后可以出差不多个context,可以使用context同时对Coredata进行操作。

2.手动创建CoreData(在创建项目的下不勾选CoreData 而是自己创立)

let modelName = "My Coredata"
    private lazy var applicationDocumentsDirectory: NSURL = {
    let urls = NSFileManager.defaultManager().URLsForDirectory(
    .DocumentDirectory, inDomains: .UserDomainMask)
    return urls[0]
    }()

    //创建NSManagedObjectContext
    lazy var context: NSManagedObjectContext = {
        var managedObjectContext = NSManagedObjectContext(
        concurrencyType: .MainQueueConcurrencyType)

    managedObjectContext.persistentStoreCoordinator = self.persistentStoreCoordinator
    return managedObjectContext
    }()
    //创建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
    }()

    //创建NSManagedObjectModel
    private lazy var managedObjectModel: NSManagedObjectModel = {
        let modelURL = NSBundle.mainBundle().URLForResource(self.modelName,
        withExtension: "momd")!
        return NSManagedObjectModel(contentsOfURL: modelURL)!
    }()

  //将数据保存
   func saveContext () {
      if context.hasChanges {
         do {
               try context.save()
             } catch let error as NSError {print("Error: \(error.localizedDescription)")abort()
         }
       }
    }

注:lazy延迟属性只有以行使该变量的当儿才见面进展初始化。大括哀号里凡是一个block,将处理结果返回给变量给变量赋值

3.使用

//获取上面创建的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
}

//进入后台时保存数据
func applicationDidEnterBackground(application: UIApplication) {
coreDataStack.saveContext()
}

流淌:数据的保存和读取与CoreData(一)中的办法sqlite同样
只是温馨创建了context而休是采用Appdelegate中自行创建的context。

网站地图xml地图