【Swift学习笔记-《PRODUCT》读书记录-CoreData数据存储】
2017-03-07 11:50
671 查看
《PRODUCT》中小记记录的文字信息,都是使用CoreData存储在本地的。下面将详细介绍,如何在xcode8中使用CoreData。
首先新建一个数据模型文件Diary.Xcatamodeld文件,如图:
选中这个数据库文件,右边可以给这个表增加属性字段
完成后,选中该文件,点击Editor菜单中的,“Ctreate NSManageObject Subclass”导出生成NSManagedObject
然后再对数据库文件做初始化,在appdelegate中创建managedObjectModel
创建persitentStoreCoordinator持久化管理
创建managedObjectContext数据库上下文:
因为后续会项目中会时常使用上下文,所以在appdelegate中定义了一个常量
到这里数据库基本初始化完成。接下来就是保存数据了,点击完成按钮保存数据
还可以自行在diary数据库文件中扩展方法。
接下来介绍怎么从CoreData中查询想要的信息。
以上便是CoreData使用介绍
首先新建一个数据模型文件Diary.Xcatamodeld文件,如图:
选中这个数据库文件,右边可以给这个表增加属性字段
完成后,选中该文件,点击Editor菜单中的,“Ctreate NSManageObject Subclass”导出生成NSManagedObject
然后再对数据库文件做初始化,在appdelegate中创建managedObjectModel
lazy var managedObjectModel: NSManagedObjectModel = { // 描述数据模型描述文件存储位置 let modelURL = Bundle.main.url(forResource: "DiaryText", withExtension: "momd")! return NSManagedObjectModel(contentsOf: modelURL)! }()
创建persitentStoreCoordinator持久化管理
lazy var persistentStoreCoordinator: NSPersistentStoreCoordinator? = { // 通过 managedObjectModel 创建持久化管理 var coordinator: NSPersistentStoreCoordinator? = NSPersistentStoreCoordinator(managedObjectModel:self.managedObjectModel) let url = self.applicationDocumentsDirectory.appendingPathComponent("DiaryText2.sqlite") // 设定数据库存储位置 var error: NSError? = nil var failureReason = "载入程序存储的数据出错." do { try coordinator!.addPersistentStore( ofType: NSSQLiteStoreType, configurationName: nil, at: url, options: nil) // 创建NSSQLiteStoreType类型持久化存储 } catch var error1 as NSError { error = error1 coordinator = nil // 报告错误 var dict = [String: AnyObject]() dict[NSLocalizedDescriptionKey] = "无法初始化程序存储的数据" as AnyObject? dict[NSLocalizedFailureReasonErrorKey] = failureReason as AnyObject? dict[NSUnderlyingErrorKey] = error error = NSError(domain: "YOUR_ERROR_DOMAIN", code: 9999, userInfo: dict) NSLog("发现错误 \(error), \(error!.userInfo)") abort() } catch { fatalError() } return coordinator }()
创建managedObjectContext数据库上下文:
lazy var managedObjectContext: NSManagedObjectContext? = { let coordinator = self.persistentStoreCoordinator if coordinator == nil { return nil } var managedObjectContext = NSManagedObjectContext(concurrencyType: .privateQueueConcurrencyType) managedObjectContext.persistentStoreCoordinator = coordinator return managedObjectContext }()
因为后续会项目中会时常使用上下文,所以在appdelegate中定义了一个常量
// Coredata let appDelegate = UIApplication.shared.delegate as! AppDelegate let managedContext = appDelegate.managedObjectContext!
到这里数据库基本初始化完成。接下来就是保存数据了,点击完成按钮保存数据
func ednBtnClick() { // 保存数据 self.titleView.endEditing(true) self.contentView.endEditing(true) if contentView.text.lengthOfBytes(using: String.Encoding.utf8) > 0 { let entity = NSEntityDescription.entity(forEntityName: "DiaryText", in: managedContext) let newdiary = DiaryText(entity: entity!, insertInto:managedContext) newdiary.context = contentView.text newdiary.location = "123" if titleView.text.lengthOfBytes(using: String.Encoding.utf8) > 0 { newdiary.title = titleView.text } var error:NSError? do{ try managedContext.save() }catch let error1 as NSError{ error = error1 print("保存出错\(error),\(error?.userInfo)") } } self.navigationController?.popToRootViewController(animated: true) }
还可以自行在diary数据库文件中扩展方法。
接下来介绍怎么从CoreData中查询想要的信息。
// 查询数据 do { // 新建查询 let fetchRequest = NSFetchRequest<DiaryText>(entityName:"DiaryText") // 排序方式 fetchRequest.sortDescriptors = [NSSortDescriptor(key: "created_at", ascending: true)] // 排序方式 fetchRequest.sortDescriptors = [NSSortDescriptor(key: "context", ascending: true)] fetched = NSFetchedResultsController(fetchRequest: fetchRequest, managedObjectContext: managedContext, sectionNameKeyPath: "year", cacheName: nil) // 建立委托关系 // fetchedResultsController.delegate = self // 尝试查询 try self.fetched.performFetch() if (fetched.fetchedObjects!.count == 0){ print("没有存储结果") }else{ if let sectionsCount = fetched.sections?.count { yearsCount = sectionsCount diartys = fetched.fetchedObjects! }else{ yearsCount = 1 sectionsCount = 0 } } } catch let error as NSError { NSLog("发现错误 \(error.localizedDescription)") } for obj in diartys{ print("\(obj.context),,,\(obj.title)") // managedContext.delete(obj) } }
以上便是CoreData使用介绍
相关文章推荐
- 【Swift学习笔记-《PRODUCT》读书记录-实现自定义转场动画】
- iOS应用开发之Core Data数据持久化存储笔记
- Swift实现CoreData存储数据
- 有关DataForm组件的研究_显示多重数据模型集合——Silverlight学习笔记[24]
- android数据存储学习记录
- cocos2d-x学习笔记19:记录存储3:使用摘要算法进行存档校验 推荐
- Xcode 4.5和iOS 6 - Core Data 持久化数据存储
- Redis学习笔记4--Redis数据存储优化机制
- SilverLight学习笔记--本地(客户端)数据存储
- Windows 8学习笔记(四)--Storage数据存储
- 【SQL Server学习笔记】变更数据捕获(Change Data Capture)
- Chap 4 学习笔记-使用C#存储变量数据
- [ios开发基础之 Core Data [1] ]Core Data数据持久性存储基础教程
- Windows Phone 7 学习笔记:数据存储与获取的方式介绍
- 【SQL Server学习笔记】变更数据捕获(Change Data Capture)
- 数据库操作_连接SQL Server数据库示例;连接ACCESS数据库;连接到 Oracle 数据库示例;SqlCommand 执行SQL命令示例;SqlDataReader 读取数据示例;使用DataAdapter填充数据到DataSet;使用DataTable存储数据库表;将数据库数据填充到 XML 文件;10 使用带输入参数的存储过程;11 使用带输入、输出参数的存储过程示;12 获得数据库中表的数目和名称;13 保存图片到SQL Server数据库示例;14 获得插入记录标识号;Exce
- Android 学习笔记7---数据存储与访问
- (JAVA SE 学习笔记)Java.SE.第002讲.原生数据类型 (Primitive Data Type)
- (JAVA SE 学习笔记)Java.SE.第003讲.原生数据类型使用陷阱.Pitfall.of.Primitive.Data.Type
- Core Data数据持久性存储基础教程