sqliteCoreData(二)—创设stack

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

3.使用

NSManagedObjectModel:用来创立数据模型,存储属性和保留数据。有个独特的
编译器momc把工程的.xcdatamodel的文书编制为一组momd文件
coredata用那组momd文件来开始化NSManagedObjectModel

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()
         }
       }
    }

NSPersistentStoreCoordinator:NSPersistentStoreCoordinator将object
model和persistent store举行关联。向object model发送音讯及从persistent
store获取新闻

注:lazy延迟属性唯有在动用该变量的时候才会开展初叶化。大括号里面是一个block,将处理结果再次来到给变量给变量赋值

2.手动创造CoreData(在开创项目标时候不勾选CoreData 而是自己创建)

1.Core Data classes

NSPersistentStore:
对存储区举行读写操作。Coredata可按照须求将数据保存为指定的方式包蕴NSQLiteStoreType、NSXMLStoreType、NSBinaryStoreType、NSInMemoryStoreType。根据名称可以看看保存的文件类型。大部分选用的是sqlite类型也是默许类型,是唯一的非原子类型(non-
atomic),其余的二种都为原子类型(atomic)。InMemory类型不可以对数码进行持久化保存只是保存在内存中,其余两种可以。

注:数据的保存和读取与CoreData(一)中的方法一致
只是团结创制了context而不是利用Appdelegate中活动创立的context。

NSManagedObjectContext:
用到的最多的一个类Coredata的大多数操作都用NSManagedObjectContext来达成在内存中保存唯有调用save()方法的时候才会将数据保存到disk。每个managed
object都必须具备一个context,并平素保持对他的引用。一个程序可以有多个context,可以应用context同时对Coredata举办操作。

网站地图xml地图