生活随笔
收集整理的這篇文章主要介紹了
coreData数据操作
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
// 1. 建立模型文件
// 2. 建立CoreDataStack
// 3. 設置AppDelegate
?
接著
//
// CoreDataStack.swift
// CoreDataStackDemo
//
// Created by wangbiao on 15/10/29.
// Copyright ? 2015年 wangbiao. All rights reserved.
//
import CoreDataclass CoreDataStack: NSObject {// MARK: - Properties
let context: NSManagedObjectContextlet coordinator: NSPersistentStoreCoordinatorlet model: NSManagedObjectModellet store: NSPersistentStore?// MARK: - Singletonstatic func defaultStack() -> CoreDataStack {return instance}fileprivate static let instance = CoreDataStack()fileprivate override init() {// 構建托管對象模型let bundle = Bundle.mainlet modelURL = bundle.url(forResource: "Test", withExtension: "momd")!model = NSManagedObjectModel(contentsOf: modelURL)!// 構建持久化存儲助理coordinator = NSPersistentStoreCoordinator(managedObjectModel: model)// 構建托管對象上下文,并且將助理連接到上下文context = NSManagedObjectContext(concurrencyType: .mainQueueConcurrencyType)context.persistentStoreCoordinator = coordinator// 構建持久化存儲let manager = FileManager.defaultlet urls = manager.urls(for: .documentDirectory, in: .userDomainMask)let documentsURL = urls.first!let storeURL = documentsURL.appendingPathComponent("Test")store = (try! coordinator.addPersistentStore(ofType: NSSQLiteStoreType,configurationName: nil, at: storeURL, options: nil))}// MARK: - Function
func saveContext () {if context.hasChanges {do {try context.save()} catch {print("Save failed...")}}}
}
接著實現數據操作
//新增數據
func insertStudent(sno: String, name: String, score: Int) {// 獲取上下文(也就是從”coreData基礎“里面的那個類里面獲取)let context = CoreDataStack.defaultStack().context// 構建實體對象let student = NSEntityDescription.insertNewObject(forEntityName: "Student",into: context) as! Student// 設置相關屬性student.sno = snostudent.name = namestudent.score = score as NSNumber?}// 查詢數據
func fetchStudents() {// 獲取上下文let context = CoreDataStack.defaultStack().context// 構建抓取請求let request = NSFetchRequest<NSFetchRequestResult>(entityName: "Student")// 指定按照學號(sno)升序排列let sort = NSSortDescriptor(key: "sno", ascending: true,selector: #selector(NSString.localizedStandardCompare(_:)))request.sortDescriptors = [sort]// 構建查詢條件
// request.predicate = NSPredicate(format: "score > 60")
// request.predicate = NSPredicate(format: "name like 'a*'")do {let students = (try context.fetch(request)) as! [Student]for student in students {print("\(student.sno!), \(student.name!), \(student.score!)")}} catch {print("Fetch failed...")}}// 統計信息
func countStudents() {
// // 1. 統計分數大于90的人數
//
// // 獲取上下文
// let context = CoreDataStack.defaultStack().context
//
// // 構建抓取請求
// let request = NSFetchRequest(entityName: "Student")
// request.predicate = NSPredicate(format: "score > 90")
// request.resultType = .CountResultType
//
// do {
// let entries = (try context.executeFetchRequest(request))
// let count = entries.first!.integerValue
// print("Count: \(count)")
// } catch {
// print("Fetch failed...")
// }// 2. 計算平均分數// 獲取上下文let context = CoreDataStack.defaultStack().context// 構建抓取請求let request = NSFetchRequest<NSFetchRequestResult>(entityName: "Student")request.resultType = .dictionaryResultType // 指定返回結果為字典// 構建表達式let description = NSExpressionDescription()description.name = "AverageScore"let args = [NSExpression(forKeyPath: "score")]description.expression = NSExpression(forFunction: "average:", arguments: args)description.expressionResultType = .floatAttributeType // 指定返回值類型// 將求平均值的表達式設置給request的屬性request.propertiesToFetch = [description]do {let entries = (try context.fetch(request))let result = entries.first! as! NSDictionarylet averageScore = result["AverageScore"]!print("Average: \(averageScore)")} catch {print("Fetch failed...")}}// 修改數據
func updateStudents() {// 獲取上下文let context = CoreDataStack.defaultStack().context// 構建抓取請求let request = NSFetchRequest<NSFetchRequestResult>(entityName: "Student")request.predicate = NSPredicate(format: "name like 'a*'")do {let students = (try context.fetch(request)) as! [Student]for student in students {student.score = 100}} catch {print("Fetch failed...")}// 保存
CoreDataStack.defaultStack().saveContext()// 備注: 批量更新 & 異步操作 ???
}// 刪除數據
func deleteStudents() {// 獲取上下文let context = CoreDataStack.defaultStack().context// 構建抓取請求let request = NSFetchRequest<NSFetchRequestResult>(entityName: "Student")request.predicate = NSPredicate(format: "score < 60")do {let students = (try context.fetch(request)) as! [Student]for student in students {context.delete(student)}} catch {print("Fetch failed...")}// 保存
CoreDataStack.defaultStack().saveContext()} 總結: 增: 1:獲取上下文 如:let context = CoreDataStack.defaultStack().context 2:構建實體對象 如:let student = NSEntityDescription.insertNewObject(forEntityName: "Student", into: context) as! Student 3:設置相關屬性 如: student.sno = sno 4:保存數據 如:CoreDataStack.defaultStack().saveContext() ? 修改,刪除 1:獲取上下文 2:構建抓取請求 如:let request = NSFetchRequest<NSFetchRequestResult>(entityName: "Student") 3:給抓去請求設置相關屬性吧 如: //相當于給它設置約束 request.predicate = NSPredicate(format: "name like 'a*'") // 指定返回結果為字典(修改,刪除一般不用設置這個) request.resultType = .dictionaryResultType 4:執行抓取操作 do { let students = (try context.fetch(request)) as! [Student] for student in students { //修改如:student.score = 100 //刪除如:context.delete(student) } } catch { print("Fetch failed...") } 5:保存數據 ? 查詢 1:獲取上下文 2:構建抓取請求 3:指定按照學號(sno)升序排列(其實此部可以省略) let sort = NSSortDescriptor(key: "sno", ascending: true, selector: #selector(NSString.localizedStandardCompare(_:))) request.sortDescriptors = [sort] 4:執行抓取語句 do { let students = (try context.fetch(request)) as! [Student] for student in students { print("\(student.sno!), \(student.name!), \(student.score!)") } } catch { print("Fetch failed...") } 5:釋放資源 ? 統計 1:獲取上下文 2:構建抓取請求 3:指定按照學號(sno)升序排列(其實此部可以省略) let sort = NSSortDescriptor(key: "sno", ascending: true, selector: #selector(NSString.localizedStandardCompare(_:))) request.sortDescriptors = [sort] 4: 構建表達式(average是聚合函數,當然還有其他的) 如:let description = NSExpressionDescription() description.name = "AverageScore" let args = [NSExpression(forKeyPath: "score")] description.expression = NSExpression(forFunction: "average:", arguments: args) description.expressionResultType = .floatAttributeType // 指定返回值類型 5:將求平均值的表達式設置給request的屬性 如request.propertiesToFetch = [description] 4:執行抓取語句 do { let entries = (try context.fetch(request)) let result = entries.first! as! NSDictionary let averageScore = result["AverageScore"]! print("Average: \(averageScore)") } catch { print("Fetch failed...") } 5:釋放資源 ? 當然,這個只是一個例子而已,不是所有的統計例子都要那么復雜的 如下面這個例子 // 1. 統計分數大于90的人數 // // // 獲取上下文 // let context = CoreDataStack.defaultStack().context // // // 構建抓取請求 // let request = NSFetchRequest(entityName: "Student") // request.predicate = NSPredicate(format: "score > 90") // request.resultType = .CountResultType // // do { // let entries = (try context.executeFetchRequest(request)) // let count = entries.first!.integerValue // print("Count: \(count)") // } catch { // print("Fetch failed...") // }
轉載于:https://www.cnblogs.com/LarryBlogger/p/6186655.html
總結
以上是生活随笔為你收集整理的coreData数据操作的全部內容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。