亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

FetchedResultsController與Core Data

發布時間:2020-09-14 09:15:11 來源:網絡 閱讀:666 作者:shskey 欄目:移動開發

NSFetchedResultsController是為了讓視圖及時響應Model層的變化而設計的,更具體的將是配合刷新UITableView上的數據。


一般而言,NSFetchedResultsController的實例是由UITableViewController的實例初始化并持有。

創建后,我們將給它分配一個代理(NSFetchedResultsControllerDelegate),當Core Data中的model有變化時,通過代理通知到對應的tableView。


  1. 對象的新增:新增的對象無法關聯到fetchedResultsController,一般是通過 [NSEntityDescription insertNewObjectForEntityForName:@"Post" inManagedObjectContext:managedObjectContext]的方式初始化并賦值,并保存( [managedObjectContext save:&error]),此處采用的是一致的managedObjectContext,會觸發NSFetchedResultsChangeInsert通知。

  2. 對象的更新:在某些需求中,對象可能是后臺異步得到json數據,然后同步進數據庫中的。直接對該對象更新,并保存( [managedObjectContext save:&error])。

  3. 對象的刪除:通過在一致的managedObjectContext上刪除對應的model對象,會觸發NSFetchedResultsChangeDelete通知。并且會將其相關的cascade關系的對象一起刪除,無需單獨操作。 [post.managedObjectContext deleteObject:post];

官方推薦的方式,是盡量在代理的didChangeObject方法中處理tableView上對section或者row的更新。不管對對象的操作是通過NSArray還是NSFetchedResultsController來獲取,亦或是通過insertNewObjectForEntityForName方法去新增,只要是在綁定到代理上的那個controller對象所包含的結果集內的對象有變化,都會觸發代理中的didChangeObject方法。


對于對象相關的關系對象變化,比如post對象有個owner對象關系,owner發生了變化,如果會影響結果集,同樣會觸發post的didChangeObject方法,反之則不會。

遇到最多的問題是相關的model有了更新,并在上下文保存了,但關聯的代理的didChangeObject方法中沒有被觸發,總結了一下,原因主要有幾個:

1. managedObejctContext不一致

2. 分析下fetch到controller對應的predicate是否包含受影響的該model,并檢查由于該model的相關屬性變化后,它對應在結果集中是新增/更新/刪除操作,那么在didChangeObject中就會觸發到相應的NSFetchedResultsChange

3. 當前返回的controller的delegate是否綁定到對應的代理上了

相關資料:

https://developer.apple.com/library/mac/documentation/Cocoa/Conceptual/CoreData/nsfetchedresultscontroller.html


向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

咸丰县| 淳安县| 和田市| 阿克苏市| 兰溪市| 莱西市| 西峡县| 通渭县| 和顺县| 神池县| 潞城市| 化德县| 温宿县| 鹿邑县| 宁波市| 华池县| 揭西县| 深泽县| 贵港市| 井陉县| 安福县| 疏附县| 桐柏县| 拉萨市| 东丽区| 双辽市| 社旗县| 宁明县| 玉溪市| 鄯善县| 页游| 北安市| 泰安市| 扶绥县| 高台县| 莎车县| 伽师县| 金川县| 双峰县| 大冶市| 华安县|