[swift]Core Data新增、更新、查詢、刪除

閱讀時間約 9 分鐘

用來操作 Core Data 的常數

private let coreDataContext = (NSApplication.shared.delegate
as! AppDelegate).persistentContainer.viewContext


取的資料數量:

func getCount() -> Int {
do{
let result = try coreDataContext.fetch(Member.fetchRequest())
for data in result as! [Member] {
if let name = data.value(forKey: "name") as? String {
print(name)
}
}
return result.count
}catch let error as NSError{
print("getCount->\(error)")
}
return 0
}


刪除:

    
func getCount() -> Int {
do{
let result = try coreDataContext.fetch(Member.fetchRequest())
for data in result as! [Member] {
if let name = data.value(forKey: "name") as? String {
print(name)
}

}
return result.count
}catch let error as NSError{
print("getCount->\(error)")
}
return 0
}

func deleteCoreData(name:String="") -> Bool {
let request : NSFetchRequest = Member.fetchRequest()
if name=="" {
return false
}

request.predicate = NSPredicate(format: "name = %@",name)

do{
let result = try coreDataContext.fetch(request)
for data in result {
coreDataContext.delete(data)
}
try coreDataContext.save()
return true
}catch let error as NSError{
print("read->\(error)")
return false
}
}


新增:

func writeCoreData(name:String) -> Bool {
let memberEntity = Member(context: coreDataContext)
memberEntity.id = NSDecimalNumber.init(value: getCount()+1)
memberEntity.name = name
memberEntity.createdate = Int(NSDate().timeIntervalSince1970).description

do{
try coreDataContext.save()
return true
}catch let error as NSError{
print("read->\(error)")
return false
}

}


更新:

func updateCoreData(oldName:String="",newName:String="") -> Bool {
let request : NSFetchRequest = Member.fetchRequest()
if oldName=="" || newName==""{
return false
}
// request.predicate = nil
request.predicate = NSPredicate(format: "name = %@",oldName)

do{
let result = try coreDataContext.fetch(request)
for data in result {
data.name = newName
data.createdate = Int(NSDate().timeIntervalSince1970).description
}
try coreDataContext.save()
return true
}catch let error as NSError{
print("read->\(error)")
return false
}
}


查詢:

func readCoreData(name:String) -> Array<Any> {
let request : NSFetchRequest = Member.fetchRequest()
//CONTAINS:查詢特定內容的資料
request.predicate = NSPredicate(format: "name CONTAINS %@ ",name)

//BEGINSWITH:查詢特定開頭的資料
request.predicate = NSPredicate(format: "name BEGINSWITH %@ ",name)

//ENDSWITH:查詢特定結尾的資料
request.predicate = NSPredicate(format: "name ENDSWITH %@ ",name)

//like:查詢特定結尾的資料(以星號的位置決定)
request.predicate = NSPredicate(format: "name like %@ ","*"+name)

//like:查詢特定開頭的資料
request.predicate = NSPredicate(format: "name like %@ ",name+"*")

//=:查詢內容要跟資料完全一樣
request.predicate = NSPredicate(format: "name = %@ ",name)

var arr = Array<Any>()

do{
let result = try coreDataContext.fetch(request)
for data in result {
let dic = NSMutableDictionary()

if let name = data.value(forKey: "name") as? String {
dic.setObject(name, forKey: "name" as NSCopying)
dic.setObject(data.value(forKey: "createdate") as! String, forKey: "createdate" as NSCopying)
dic.setObject(data.value(forKey: "id") as! NSDecimalNumber, forKey: "id" as NSCopying)
// print(name)
}
arr.append(dic)
}
}catch let error as NSError{
print("read->\(error)")
}
return arr
}
8會員
123內容數
嗨,我是一名程式設計師,會在這分享開發與學習紀錄。
留言0
查看全部
發表第一個留言支持創作者!
小黑與程式的邂逅 的其他內容
func applicationShouldTerminateAfterLastWindowClosed(_ sender: NSApplication) -> Bool { NSApplication.shared.terminate(self) return
字串交換: let str = "被誰喜歡,又喜歡誰呢?" // 交換 print(str.replacingOccurrences(of: ",又", with: "?")) //被誰喜歡?喜歡誰呢? 字串去首尾: let str = "被誰喜歡,又喜歡誰呢?" // 去首尾 print
int to data: //int to data var num = -12300 let data = Data.init(bytes: &num, count: MemoryLayout.size(ofValue: num)) // bytes : 8 elements //
以底下兩數字為例: let bin1:UInt8 = 0b11111111 //255 let bin2:UInt8 = 0b00001000 //8 向右位移: let shiftRightBin1Result = bin1>>1 print(String(shiftRightBin1R
以底下兩數字為例: let bin1:UInt8 = 0b11111111 //255 let bin2:UInt8 = 0b00001000 //8 and運算 let andResult = bin1 & bin2 print(String(andResult,radix: 2))//
二進制表示方式 let bin1:UInt8 = 0b11111111 //255 let bin2:UInt8 = 0b00001000 //8 八進制表示方式 let otc:UInt8 = 0o377 //255 十六進制表示方式 let hex:UInt8 = 0xff /
func applicationShouldTerminateAfterLastWindowClosed(_ sender: NSApplication) -> Bool { NSApplication.shared.terminate(self) return
字串交換: let str = "被誰喜歡,又喜歡誰呢?" // 交換 print(str.replacingOccurrences(of: ",又", with: "?")) //被誰喜歡?喜歡誰呢? 字串去首尾: let str = "被誰喜歡,又喜歡誰呢?" // 去首尾 print
int to data: //int to data var num = -12300 let data = Data.init(bytes: &num, count: MemoryLayout.size(ofValue: num)) // bytes : 8 elements //
以底下兩數字為例: let bin1:UInt8 = 0b11111111 //255 let bin2:UInt8 = 0b00001000 //8 向右位移: let shiftRightBin1Result = bin1>>1 print(String(shiftRightBin1R
以底下兩數字為例: let bin1:UInt8 = 0b11111111 //255 let bin2:UInt8 = 0b00001000 //8 and運算 let andResult = bin1 & bin2 print(String(andResult,radix: 2))//
二進制表示方式 let bin1:UInt8 = 0b11111111 //255 let bin2:UInt8 = 0b00001000 //8 八進制表示方式 let otc:UInt8 = 0o377 //255 十六進制表示方式 let hex:UInt8 = 0xff /
你可能也想看
Google News 追蹤
Thumbnail
這個秋,Chill 嗨嗨!穿搭美美去賞楓,裝備款款去露營⋯⋯你的秋天怎麼過?秋日 To Do List 等你分享! 秋季全站徵文,我們準備了五個創作主題,參賽還有機會獲得「火烤兩用鍋」,一起來看看如何參加吧~
Thumbnail
美國總統大選只剩下三天, 我們觀察一整週民調與金融市場的變化(包含賭局), 到本週五下午3:00前為止, 誰是美國總統幾乎大概可以猜到60-70%的機率, 本篇文章就是以大選結局為主軸來討論近期甚至到未來四年美股可能的改變
Thumbnail
Faker昨天真的太扯了,中國主播王多多點評的話更是精妙,分享給各位 王多多的點評 「Faker是我們的處境,他是LPL永遠繞不開的一個人和話題,所以我們特別渴望在決賽跟他相遇,去直面我們的處境。 我們曾經稱他為最高的山,最長的河,以為山海就是盡頭,可是Faker用他28歲的年齡...
Thumbnail
字數算法 = string.count? 在swift算一個string的字數時候,很直覺的會想到用.count來算 let s = "這是幾個字呢".count print(s.count) // 6 毫無疑問的安心信賴6個字 表情符號的場合 let emoji = "😂" print
Thumbnail
一樣先來看官方文件 A view controller that provides access to documents or destinations outside your app’s sandbox. 其實就是讓你去讀取檔案App的東西 有兩種模式,Don’t copy the do
swift讀書筆記 https://docs.swift.org/swift-book/documentation/the-swift-programming-language/deinitialization/  class instance deallocated前會call deinitia
Thumbnail
swift讀書筆記 Documentation Edit descriptiondocs.swift.org objective-c 的init 會return value,swift 不會。 所有的property都必須在Init()裡面設定初始值,或設定stored property,這種
Thumbnail
其實16也會ㄏㄏ 相關討論: https://developer.apple.com/forums/thread/703145 重現步驟: 在iOS15以上,使用UIActivityViewController執行下列步驟會crash 1. 開啟UIActivityViewControlle
Thumbnail
一般來說在swift把Date轉成String,會使用dateFormat轉換 使用HH:mm轉成24小時制需注意的地方
三元條件運算子(Ternary Conditional Operator)是一種簡潔的寫法,用於在滿足條件時返回一個值,否則返回另一個值。 基本語法 其中,condition是要測試的條件,如果為true,則返回valueIfTrue,否則返回valueIfFalse。
Thumbnail
俄羅斯被踢出 SWIFT 支付系統,媒體形容是美、歐政府對俄羅斯發動了金融核戰。到底什麼是 SWIFT 它是如何運作的,鬼宿來告訴大家媒體沒有說清楚的事。可以這麼說:如果沒有 SWIFT;美元連在境內流動都將是不可能的任務。
本文推薦免費的3個網站,分為初學者、已有學過程式語言者兩類,鑑於PTT和自身的學習經驗,只要持之以恆的學習,Coding一定會給予回報。
Thumbnail
這個秋,Chill 嗨嗨!穿搭美美去賞楓,裝備款款去露營⋯⋯你的秋天怎麼過?秋日 To Do List 等你分享! 秋季全站徵文,我們準備了五個創作主題,參賽還有機會獲得「火烤兩用鍋」,一起來看看如何參加吧~
Thumbnail
美國總統大選只剩下三天, 我們觀察一整週民調與金融市場的變化(包含賭局), 到本週五下午3:00前為止, 誰是美國總統幾乎大概可以猜到60-70%的機率, 本篇文章就是以大選結局為主軸來討論近期甚至到未來四年美股可能的改變
Thumbnail
Faker昨天真的太扯了,中國主播王多多點評的話更是精妙,分享給各位 王多多的點評 「Faker是我們的處境,他是LPL永遠繞不開的一個人和話題,所以我們特別渴望在決賽跟他相遇,去直面我們的處境。 我們曾經稱他為最高的山,最長的河,以為山海就是盡頭,可是Faker用他28歲的年齡...
Thumbnail
字數算法 = string.count? 在swift算一個string的字數時候,很直覺的會想到用.count來算 let s = "這是幾個字呢".count print(s.count) // 6 毫無疑問的安心信賴6個字 表情符號的場合 let emoji = "😂" print
Thumbnail
一樣先來看官方文件 A view controller that provides access to documents or destinations outside your app’s sandbox. 其實就是讓你去讀取檔案App的東西 有兩種模式,Don’t copy the do
swift讀書筆記 https://docs.swift.org/swift-book/documentation/the-swift-programming-language/deinitialization/  class instance deallocated前會call deinitia
Thumbnail
swift讀書筆記 Documentation Edit descriptiondocs.swift.org objective-c 的init 會return value,swift 不會。 所有的property都必須在Init()裡面設定初始值,或設定stored property,這種
Thumbnail
其實16也會ㄏㄏ 相關討論: https://developer.apple.com/forums/thread/703145 重現步驟: 在iOS15以上,使用UIActivityViewController執行下列步驟會crash 1. 開啟UIActivityViewControlle
Thumbnail
一般來說在swift把Date轉成String,會使用dateFormat轉換 使用HH:mm轉成24小時制需注意的地方
三元條件運算子(Ternary Conditional Operator)是一種簡潔的寫法,用於在滿足條件時返回一個值,否則返回另一個值。 基本語法 其中,condition是要測試的條件,如果為true,則返回valueIfTrue,否則返回valueIfFalse。
Thumbnail
俄羅斯被踢出 SWIFT 支付系統,媒體形容是美、歐政府對俄羅斯發動了金融核戰。到底什麼是 SWIFT 它是如何運作的,鬼宿來告訴大家媒體沒有說清楚的事。可以這麼說:如果沒有 SWIFT;美元連在境內流動都將是不可能的任務。
本文推薦免費的3個網站,分為初學者、已有學過程式語言者兩類,鑑於PTT和自身的學習經驗,只要持之以恆的學習,Coding一定會給予回報。