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(一)中的方法相同 只是自己创建了context而不是使用Appdelegate中自动创建的context。