日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

coreData数据操作

發布時間:2024/9/21 编程问答 41 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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数据操作的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。