CoreData之數據的增、刪、查

導語

該文僅是筆者對CoreData的理解,文中書寫不當和錯誤的地方還請各位看官給予指正。

iOS數據存儲有四種方式

對象歸檔、Plist、SQLite和CoreData.該篇文章主要介紹CoreData的使用。

為什么使用CoreData?

1.代碼量少:可以不用編寫數據庫接口代碼;2.界面可視化;3.可以使用instruments相關模版測試;

基本構成

數據持久化-CoreData、SQLite、FMDB - 推酷

1)NSManagedObjectContext(被管理的數據上下文)

操作實際內容(操作持久層)

作用:插入數據,查詢數據,刪除數據

2)NSManagedObjectModel(被管理的數據模型)

數據庫所有表格或數據結構,包含各實體的定義信息

作用:添加實體的屬性,建立屬性之間的關系

操作方法:視圖編輯器,或代碼

3)NSPersistentStoreCoordinator(持久化存儲助理)

相當于數據庫的連接器

作用:設置數據存儲的名字,位置,存儲方式,和存儲時機

4)NSManagedObject(被管理的數據記錄)

相當于數據庫中的表格記錄

5)NSFetchRequest(獲取數據的請求)

相當于查詢語句

6)NSEntityDescription(實體結構)

相當于表格結構

7)后綴為.xcdatamodeld的包

里面是.xcdatamodel文件,用數據模型編輯器編輯

編譯后為.momd或.mom文件

數據查詢、添加、刪除

數據查詢可以通過NSFetchRequest來實現,有四種方式。假設CoreData中的實體為Venue,定義一個數組 var venues:[Venue]! = []

managedContext = appDelegate.managedObjectContext

//查詢數據

//? 1.

let batchUpdate = NSBatchUpdateRequest(entityName: "Venue")

batchUpdate.propertiesToUpdate = ["實體中的屬性" : 屬性類型,例如:NSNumber(bool: true)]

batchUpdate.affectedStores = managedContext.persistentStoreCoordinator!.persistentStores

batchUpdate.resultType = .UpdatedObjectsCountResultType

do {

let batchResult = try managedContext.executeRequest(batchUpdate) as! NSBatchUpdateResult

print("Records updated \(batchResult.result!)")

} catch let error as NSError {

print("Could not update \(error), \(error.userInfo)")

}

//? 2.

fetchRequest = NSFetchRequest(entityName: "Venue")

//? 3.? 這步的實現需要在.xcdatamodel文件中建立一個FetchRequest,如下圖所示

let model = managedContext.persistentStoreCoordinator?.managedObjectModel

fetchRequest = model?.fetchRequestTemplateForName("FetchRequest")

//? 4

asyncFetchRequest = NSAsynchronousFetchRequest(fetchRequest: fetchRequest, completionBlock: {[unowned self] (result: NSAsynchronousFetchResult! )

-> Void in

self.venues = result.finalResult as! [Venue]

})

do{

//方法2和3都可通過這句話得到venues

// venues = try managedContext.executeFetchRequest(fetchRequest) as! [Venue]

//執行方法 4

try managedContext.executeRequest(asyncFetchRequest)

}catch let error as NSError {

print(error)

}

//添加數據

let venue = NSEntityDescription.insertNewObjectForEntityForName("Venue",inManagedObjectContext: managedObjectContext) as! Venue

venue.name = "zhangsan"

venue.age = 18

do {

try managedContext.save()

}catch let error as NSError {

print("could not save\(error),\(error.userInfo)")

}

//刪除數據

//let fetchRequest = NSFetchRequest(entityName: "Venue")

do {

let results = try managedContext.executeFetchRequest(fetchRequest)

for data in results {

managedContext.deleteObject(data as! NSManagedObject)

do {

try managedContext.save()

}catch let error as NSError {

print("could not save\(error),\(error.userInfo)")

}

}

} catch let error as NSError {

print("Could not fetch \(error), \(error.userInfo)")

}

}


上圖實現的方式:長按Add entity

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容