2015-09-20 61 views
2

我有一個CoreData模型,我可以插入一些字符串作爲新行。然後我的NSFetchedResultsController類型返回.Insert如何在更改我的上下文後強制NSFetchedResultsController更新

但是,當我改變我的一樣的數據:

let uri = NSURL(string: "My Object ID")! 
let mID = self.managedObjectContext!.persistentStoreCoordinator!.managedObjectIDForURIRepresentation(uri) 
let oldM = try self.managedObjectContext!.existingObjectWithID(mID!) as! Soft 
oldM.info = "New data" 

有時NSFetchedResultsController不發送.Update但有時它工作得很好。是什麼原因?有什麼辦法可以強制更新到NSFetchedResultsController

UPDATE 我試圖檢查時該代碼調用

func controllerWillChangeContent(controller: NSFetchedResultsController) { 
    print("test 1") 
} 

func controllerDidChangeContent(controller: NSFetchedResultsController) { 
    print("test 2") 
} 

,這兩個值我只有當NSFetchedResultsController發送某種類型的.Update .Insert,所以我甚至不更新的tableView,也許我可以添加觀察,然後更新我的行。

+0

看看http://stackoverflow.com/a/16296365/1187415,這可能是您的問題的可能解決方案。 –

回答

0

你用這段代碼處理的一些操作可能不會更新表數據。您通常需要調用tableView.reloadData()來獲取屏幕上的更新。

+0

對於獲取的結果控制器,您通常不*必須調用reloadData,因爲在更改受管對象後,受影響的表視圖行會自動更新。 –

+0

行通過調用didChangeObject進行更新,您可以在其中調用適用於changeType的方法以重新加載數據。如果被調用的操作不是.Insert,.Update等中的一個,調用.reloadData()是一種常見的做法。我錯了嗎? 「自動更新」 –

+0

措辭不當。通常,您可以調用insertRowsAtIndexPaths/deleteRowsAtIndexPaths/reloadRowsAtIndexPaths,例如,請參閱https://developer.apple.com/library/prerelease/ios/documentation/CoreData/Reference/NSFetchedResultsControllerDelegate_Protocol/index.html中的示例代碼,以便獲得很好的動畫效果更新。 –

相關問題