swift语言IOS8开发战记21 Core Data2

新年到了,祝大家大家羊年快乐,喜气洋洋。上一话中我们简单地介绍了一些coredata的基本知识,这一话我们通过编程来实现coredata的使用。这一话中建立的几个变量对照上一话中讲到的coredata中重要的变量,在AppDelegate中,添加如下代码:

lazy var applicationDocumentsDirectory:NSURL = {let urls = NSFileManager.defaultManager().URLsForDirectory(.DocumentDirectory, inDomains: .UserDomainMask)return urls[urls.count – 1] as NSURL}() //官方比较推荐的写法 跟我们之前接触的大多数数据库访问的语句相似,这是通过一个闭包来设置url的。

lazy var managedObjectModel: NSManagedObjectModel = {let modelUrl = NSBundle.mainBundle().URLForResource("Model", withExtension: "momd")return NSManagedObjectModel(contentsOfURL: modelUrl!)!}()//加载model 还记得我们在coredata中定义的那个Model么,上面这段代码会加载这个Model。

lazy var persistenetStoreCoordinator:NSPersistentStoreCoordinator = {var coordinator: NSPersistentStoreCoordinator? = NSPersistentStoreCoordinator(managedObjectModel: self.managedObjectModel)let url = self.applicationDocumentsDirectory.URLByAppendingPathComponent("data.sqlite")var error: NSError? = nilvar failureString = "Three was an error when creating or loading the application's saved data"if coordinator?.addPersistentStoreWithType(NSSQLiteStoreType, configuration: nil, URL: url, options: nil, error: &error) == nil {coordinator = nillet dict = NSMutableDictionary()dict[NSLocalizedDescriptionKey] = "Failed to initialize the application's save data"dict[NSLocalizedFailureReasonErrorKey] = failureStringdict[NSUnderlyingErrorKey] = errorerror = NSError(domain: "YOUR_ERROR_DOMAIN", code: 9999, userInfo: dict)NSLog("Unsolved error\(error), \(error.userInfo)")abort()//有错误直接退出}return coordinator!//没有错误就返回}()//持久化 上面这段代码定义了持久化的存储器和错误的处理方式

lazy var managedObjectContext:NSManagedObjectContext = {let coordinator = self.persistenetStoreCoordinatorvar managedObjectContext = NSManagedObjectContext()managedObjectContext.persistentStoreCoordinator = coordinatorreturn managedObjectContext}()//上下文 变量定义足够了之后我们来定义方法:

func saveContext(){if let moc = self.managedObjectContext {var error:NSError? = nilif moc.hasChanges && !moc.save(&error){NSLog("Unsolved error\(error), \(error.userInfo)")abort()}}} 上一话中说过,如果没有调用save方法,那么我们对coredata的操作都会在内存中,而不会持久化。定义完方法之后,我们对coredata的准备都已经完成了。最后强调一点,coredata并不是数据库,,它只是一个框架,协助我们进行数据库操作,它并不关心我们把数据存到哪里。此外我们只创建一个model是不够的,需要再创建一个关联文件如下图所示:

一路点下去,后面的操作是自动关联的,生成的文件如下:

微笑的去寻找一个不可能出现的你。

swift语言IOS8开发战记21 Core Data2

相关文章:

你感兴趣的文章:

标签云: