
今天我们来通过创建一个小的Demo来实践我们的CoreDate 的学习。参考书籍Core_Data_by_Tutorials
初始项目
更多关于CoreDate的基础知识
二
创建Core Data Stack主要一下几个步骤:
NSManagedobjectModel
nspresistentStore
NSPersistentStoreCoordinator
NSManagedobjectContext
在这里就不多说每一个都是什么了,可以参考上边给出的两篇博客
Show your code
import CoreDataclass 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() } } }} 选择VIEwController.swift添加下边代码import CoreData
添加属性:var managedContext: NSManagedobjectContext!
然后打开AppDelegate.swift
import CoreData
添加属性:
lazy var coreDataStack = CoreDataStack()
在application(_:dIDFinishLaunchingWithOptions:)添加下边代码
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 } 最后我们在 UIApplicationDelegate的两个方法中调用存储方法
func applicationWillTerminate(application: UIApplication) { coreDataStack.saveContext() } func applicationDIDEnterBackground(application: UIApplication) { coreDataStack.saveContext() } Modeling your data 打开Dog Walk
添加 Dog Entity,添加属性 name 类型为 String
添加 Walk Entity,添加属性 date 类型为 Date
接下来我们完成关系。
打开 Dog Entity,添加relationship name 为 walks Set the destination to Walk
在属性版中修改Type类型,To Many,勾选 Ordered
打开 Walk Entity,添加relationship name 为 dog relationship 为 Dog Set the destination as dog and the inverse as walks.
command + n 选择 NSManagedobject Subclass 选择 Dog Walk model 并且选中 Dog 和 Walk entitIEs。 语言选择 Swift
我在生成的Walk.swift和 Dog.swift中都重写了父类的方法,为了在生成这两个类的时候有代码提示。
overrIDe init(entity: NSEntityDescription,insertIntoManagedobjectContext context: NSManagedobjectContext?) { super.init(entity: entity,insertIntoManagedobjectContext: context) } A walk down persistence lane 如果你上边的步骤都已经完成了,那么我们就可以开始存储数据了。
首先在VIEwController.swift中添加一个属性 var currentDog: Dog! 然后我们在vIEwDIDLoad()中来添加一些数据
//创建一个 Entitylet 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 来试试吧。
完成的项目
总结以上是内存溢出为你收集整理的CoreData初次实践(一)全部内容,希望文章能够帮你解决CoreData初次实践(一)所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)