CoreData初次实践(一)
今天我们来通过创建一个小的Demo来实践我们的CoreDate 的学习。参考书籍Core_Data_by_Tutorials 初始项目 更多关于CoreDate的基础知识 二 创建Core Data Stack主要一下几个步骤:
Show your code import CoreData class CoreDadaStack { /// model Name private let modelName = "Dog Walk" /// Document Directory URL private lazy var applicationDocumentsDirectory: NSURL = { let urls = NSFileManager.defaultManager().URLsForDirectory(.DocumentDirectory,inDomains: .UserDomainMask) return urls[urls.count - 1] }() /// Managed Object Model private lazy var managedObjectModel: NSManagedObjectModel = { let modelURL = NSBundle.mainBundle().URLForResource(self.modelName,withExtension: "momd") return NSManagedObjectModel(contentsOfURL: modelURL!)! }() /// Presistent Store Coordinator private lazy var psc: 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("添加持久化存储区错误") } return coordinator }() /// Managed Object Context lazy var context: NSManagedObjectContext = { var managedObjectContext = NSManagedObjectContext(concurrencyType: .MainQueueConcurrencyType) managedObjectContext.persistentStoreCoordinator = self.psc return managedObjectContext }() /** Save Context Data */ func saveContext() { if context.hasChanges { do { try context.save() } catch let error as NSError { print("错误 ? (error.localizedDescription)") abort() } } } } 选择 添加属性: 然后打开
在 func application(application: UIApplication,didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool { let navigationController = window?.rootViewController as! UINavigationController let viewcontroller = navigationController.topViewController as! ViewController viewcontroller.managedContext = coreDataStack.context return true } 最后我们在 func applicationWillTerminate(application: UIApplication) { coreDataStack.saveContext() } func applicationDidEnterBackground(application: UIApplication) { coreDataStack.saveContext() } Modeling your data打开 添加 添加 接下来我们完成关系。 打开 打开 Adding managed object subclasses
我在生成的 override init(entity: NSEntityDescription,insertIntoManagedObjectContext context: NSManagedObjectContext?) { super.init(entity: entity,insertIntoManagedObjectContext: context) } A walk down persistence lane如果你上边的步骤都已经完成了,那么我们就可以开始存储数据了。 首先在 //创建一个 Entity let dogEntity = NSEntityDescription.entityForName("Dog",inManagedObjectContext: managedContext) let dogName = "Fido" //首先来检查在数据库中是否存在一个名为 Fido 的狗过 let dogFetch = NSFetchRequest(entityName: "Dog") dogFetch.predicate = NSPredicate(format: "name == %@",dogName) do{ //执行查询 let results = try managedContext.executeFetchRequest(dogFetch) as! [Dog] //如果这个狗狗存在的话直接获取赋值给 currentDog if results.count > 0 { currentDog = results.first }else { //如果不存在 则实例化一个Dog currentDog = Dog(entity: dogEntity!,insertIntoManagedObjectContext: managedContext) currentDog.name = dogName try managedContext.save() } }catch let error as NSError{ print("Error:(error)" + "description:(error.localizedDescription)") } 接下来我们来实现点击添加按钮之后添加新狗狗散步时间的功能。 @IBAction func add(sender: AnyObject) { //添加一个新的 Walk Entity into Core Data let walkEntity = NSEntityDescription.entityForName("Walk",inManagedObjectContext: managedContext) let walk = Walk(entity: walkEntity!,insertIntoManagedObjectContext: managedContext) walk.date = NSDate.timeIntervalSinceReferenceDate() //insert the new walk into the dog's walks set let walks = currentDog.walks!.mutableCopy() as! NSMutableOrderedSet walks.addObject(walk) currentDog.walks = walks.copy() as? NSOrderedSet //save the managed object context do { try managedContext.save() }catch let error as NSError { print("Could not save:(error)") } tableView.reloadData() } 现在你运行程序,点击?就可以看到有新的数据在列表中显示。 Deleting objects from Core Data我们接下来就是要把我们添加的数据删除。 func tableView(tableView: UITableView,commitEditingStyle editingStyle: UITableViewCellEditingStyle,forRowAtIndexPath indexPath: NSIndexPath) { if editingStyle == .Delete { //选择要删除的walk let walkToRemove = currentDog.walks![indexPath.row] as! Walk //删除 managedContext.deleteObject(walkToRemove) do { //保存操作 try managedContext.save() }catch let error as NSError { print("Could not save: (error)") } // 删除视图中的数据 tableView.deleteRowsAtIndexPaths([indexPath],withRowAnimation: .Automatic) } } 运行你的app 来试试吧。
完成的项目 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |