最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Swift使用CoreData時遇到的一些填坑記錄

 更新時間:2017年12月06日 09:20:29   作者:Cyandev  
這篇文章主要給大家記錄了在Swift使用CoreData時遇到的一些坑,以及介紹了CoreData在Swift 3.0中的一點改變,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面來一起看看吧。

前言

最近在做一個 App 練手,其中用到了 CoreData 來存儲用戶的播放列表,由于 CoreData 這部分的文章還是比較少的,所以遇到了不少坑,所以寫篇隨筆記錄一下。

題外話:可以給大家看看這個 App 的界面,我覺得還是挺清新的😄


P.S. 作為背景的氛圍圖片用的是 CoreImage 生成的

切入正題。

#0 何時執(zhí)行保存

起初我認為不用顯式執(zhí)行 Xcode 給我們在 AppDelegate 中生成的 saveContext 函數(shù),因為默認情況下 applicationWillTerminate 會執(zhí)行 saveContext,但是我發(fā)現(xiàn)這個生命周期函數(shù)壓根不靠譜,當用戶直接從多任務視圖將 App 結(jié)束掉時這個函數(shù)根本來不及執(zhí)行完畢,導致我們的數(shù)據(jù)不能及時寫入本地數(shù)據(jù)庫中。所以合理的調(diào)用時機我認為還是應該在完成一批操作以后就直接執(zhí)行一次 saveContext

下面簡單貼一下我的部分代碼吧:



#1 Relationships 到底什么鬼

另外一個讓我很頭疼的就是 Relationships,寫這塊的那天可能有點情緒原因,看蘋果官方的 Guideline 看不進去,而且 Google 關于 Relationships 相關的文章也十分少,索性自己悶頭研究了。

先說說我遇到了什么問題,我想將屬于一個歌單的所有 Song 實體添加到 Playlist 實體的 songs 這個 Relationships 中去,但是發(fā)現(xiàn)怎么加都加不進去。我已開始的做法是先用 valueForKey 拿到 songs 屬性所代表的 NSManagedObject,然后強制轉(zhuǎn)換到 NSMutableSet 然后執(zhí)行添加操作,發(fā)現(xiàn)人家壓根不鳥我這個操作,雖然沒有拋異常,也沒有任何 log 打出,但是 “It does NOT work!!!”。

經(jīng)過一番研究,我發(fā)現(xiàn)了 NSManagedObject 有個 mutableSetValueForKey,才發(fā)現(xiàn)當初我真是傻了逼了....

于是用 mutableSetValueForKey 拿到這個 NSMutableSet 順利執(zhí)行添加操作并保存,成功了。

#2 Type Conversion From Objective-C to Swift

這塊主要是談談一些關于類型的一些事。我們知道 Swift 引入了一系列新的數(shù)據(jù)類型,比如 String、Int、Dictionary、Array,還有一個神奇的 AnyObject 和 Optional<T> 值。

這里我就直接說了

Swift 中的 String 可以直接作為 NSString 使用,它們之間可以 Toll-Free 轉(zhuǎn)換
Int、Float、Double 仍然不是一個標準的 NSObject 對象,所以 KVC 就沒有它們什么事,所以我們?nèi)匀恍枰?NSNumber 包裝一下送入 NSManagedObject,同時拿出來的時候用 xxxValue 取出。

還有,Relationships 一定是 NSSet 類型,不是 NSArray 類型,數(shù)據(jù)庫的關系都是無序的,如果需要有序可以添加一個字段然后查詢時用 SortDescription 來排序。

最后,"!"是邪惡符號,慎用。

CoreData在Swift 3.0中的一點改變

在Swift 2.0中我們需要從core data中query結(jié)果的時候使用的是如下方式:

func findAnimals() {
let request = NSFetchRequest(entityName:”Animal")
do {
guard let searchResults = try context.executeFetchRequest(request) as? [Animal] else {
print("Results were not of the expected structure")
}
... use(searchResults) ...
} catch {
print("Error ocurred during execution: \(error)")
}
}

注意:以上代碼試圖將executeFetchRequest返回的結(jié)果轉(zhuǎn)換為實際數(shù)據(jù)類型的數(shù)組。同時我們看到,在建立request的時候直接使用的是NSFetchRequest的純構(gòu)造器方式。

但是在Swift 3.0中首先我們在創(chuàng)建request的時候必須用范型來指定實際數(shù)據(jù)類型,你可以用如下任何一句來完成:

let fetch0 = NSFetchRequest<Commit>(entityName: "Commit")

let fetch1:NSFetchRequest<Commit> = Commit.fetchRequest()

接下來在處理fetch結(jié)果的時候我們不可以將NSFetchRequestResult直接轉(zhuǎn)換為[Commit],因為這樣非相關性的轉(zhuǎn)換總是失敗!作為代替我們使用context的另一個方法來完成:

do{
let commits = try managedObjectContext.fetch(fetch)
print("***** \(commits.count) commits *****")
objects = commits
tableView.reloadData()

}catch let error{
print("Fetch failed : \(error.localizedDescription)")
}

總結(jié)

以上就是這篇文章的全部內(nèi)容了,希望本文的內(nèi)容對大家的學習或者工作具有一定的參考學習價值,如果有疑問大家可以留言交流,謝謝大家對腳本之家的支持。

相關文章

  • iOS開發(fā)中Swift 指紋驗證功能模塊實例代碼

    iOS開發(fā)中Swift 指紋驗證功能模塊實例代碼

    本文給大家分享ios調(diào)用touchid代碼塊,非常不錯,具有參考借鑒價值,需要的朋友參考下把
    2017-03-03
  • 用Swift構(gòu)建一個簡單的iOS郵件應用的方法

    用Swift構(gòu)建一個簡單的iOS郵件應用的方法

    這篇文章主要介紹了用Swift構(gòu)建一個簡單的iOS郵件應用的方法,包括查看和標記已讀等基本的郵件應用功能,需要的朋友可以參考下
    2015-07-07
  • Swift UIButton使用教程

    Swift UIButton使用教程

    這篇文章主要介紹了Swift UIButton的使用方法,幫助大家更好的理解和學習swift編程,感興趣的朋友可以了解下
    2020-09-09
  • 關于Swift 4.1中的Codable改進詳解

    關于Swift 4.1中的Codable改進詳解

    這篇文章主要給大家介紹了關于Swift 4.1中的Codable改進的相關資料,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧。
    2018-02-02
  • Swift繪制漸變色的方法

    Swift繪制漸變色的方法

    這篇文章主要為大家詳細介紹了Swift繪制漸變色的方法,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-08-08
  • 詳解Swift 結(jié)構(gòu)體

    詳解Swift 結(jié)構(gòu)體

    這篇文章主要介紹了Swift 結(jié)構(gòu)體的相關資料,幫助大家更好的理解和學習,感興趣的朋友可以了解下
    2020-09-09
  • Swift中的類class與結(jié)構(gòu)體struct體學習筆記

    Swift中的類class與結(jié)構(gòu)體struct體學習筆記

    和C++一樣,Swfit中同時擁有類與結(jié)構(gòu)體,能夠充分滿足開發(fā)者面向?qū)ο蠛兔嫦蜻^程編程的需求,這里我們就來看一下Swift中的類class與結(jié)構(gòu)體struct體學習筆記
    2016-07-07
  • SwiftUI中TabView組件的常規(guī)使用

    SwiftUI中TabView組件的常規(guī)使用

    這篇文章主要給大家介紹了關于SwiftUI中TabView組件的常規(guī)使用,文中通過實例代碼介紹的非常詳細,對大家學習或者使用SwiftUI具有一定的參考學習價值,需要的朋友可以參考下
    2022-06-06
  • swift 4自定義UITableCell的方法示例

    swift 4自定義UITableCell的方法示例

    這篇文章主要給大家介紹了關于swift 4自定義UITableCell的相關資料,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2018-06-06
  • swift在IOS應用圖標上添加提醒個數(shù)的方法

    swift在IOS應用圖標上添加提醒個數(shù)的方法

    本文是通過swift語言實現(xiàn)在應用圖標右上角添加消息個數(shù)提醒的功能,非常不錯,具有參考借鑒價值,感興趣的朋友一起看下吧
    2016-08-08

最新評論

左云县| 娄底市| 鹤岗市| 安西县| 花莲市| 读书| 运城市| 通榆县| 呼玛县| 襄樊市| 冷水江市| 古田县| 黄平县| 永平县| 吉安县| 讷河市| 建阳市| 保靖县| 大田县| 兴化市| 隆尧县| 奉化市| 玉门市| 泾川县| 紫金县| 新源县| 浮梁县| 行唐县| 武乡县| 惠安县| 三穗县| 永定县| 乌拉特中旗| 高雄县| 渑池县| 安庆市| 德保县| 环江| 海晏县| 杭州市| 长沙市|