0

我把我的頭髮撕掉,試圖讓它工作。NSURLConnection和NSFetchedResultsController

我已經看過所有與StackOverflow相關的問題,但我不能得到最後一步的工作!

我有一個NSFetchedResultsController顯示來自Core Data的數據。這一切都完美。當有數據時,它會顯示數據,一切正常。

但是,我有一個異步更新,從一個在線服務器拉下更多的數據並將其保存到核心數據。

我想要發生的是,NSFetchedResultsController拿起這些更新,然後顯示它們(即將它們動畫到當前顯示的tableView上)。

的設立我此刻是像這樣................

感謝這兩個反應這一點,我有另一個去嘗試爲了使這個工作,但我仍然沒有看到「實時」的更新。

我想我會去解釋我現在在哪裏。我發現了一些我最初設置的問題,現在我已經修復但仍然沒有任何問題。

好了,第一類和發生了什麼地方...

[CLASS =的AppDelegate]
[有managedObjectContext(主要方面)以及持久性存儲等..]
[方法= mergeChanges :notifiaction 此使用GCD找回到mainThread和不mergeChangesWithObjectblahblah]

[CLASS = NetworkDataClass]
[這有在初始化自己的ManagedObjectContext時生成(在主線程)
[Method = saveContext
] 1.將AppDelegate添加爲bgContext的didsvitotification的觀察者。
2. SaveContext。
3.刪除的AppDelegate作爲觀察員(我知道,觀察工作,因爲我在當將保存停止AppDelegate的斷點。)
[方法= getDataFromOnline(而不是實際的名字,但你得到的要點)
1.將GCD放入bg線程。
2.創建一個NSURLRequest。
3.同步運行請求。
4.將數據放入類上下文中。
5.運行自saveContext]

[類= tableViewClass]
[是否已經和的tableView NSFetchedResultsController還使用NSFetchedResultsControllerDelegate]
[方法= viewWillAppear中
在我的網絡類單 1.運行getDataFromOnline方法]

我有一些默認數據在那裏,以確保它正在顯示,當我進入tableViewClass(詳細上述),我可以正確看到正確的排序順序正確的部分標題等數據...所以我可以清楚地看到fetchedresultscontroller正在工作。

我也可以看到(帶有斷點)它正確觸發了getDataFromOnline方法。我可以看到有數據進入,我可以看到它是通過我的ManagedObject子類添加的,這一切都發生在bgthread中。

我也可以看到,當它保存時,AppDelegate正常運行其mergeChanges函數。

我無法看到的唯一的事情就是正在用新數據更新表格。

如果我popToRootViewController並返回到我的表然後繁榮所有新的數據在那裏,所以我知道合併已經通過和新的數據已被添加和合並,但它只是沒有出現在合併時間。

有什麼我失蹤了嗎?

我需要在表上運行reloadData嗎?我是否需要從fetchedresultscontroller中啓動「重新讀取」​​或其他內容?

現在真的在掙扎着。

感謝您提供任何(更多)幫助。

+0

我相信'NSFetchedResultsControllerDelegate'方法實際上是需要實施更新監控的方法。另外 - 嘗試使用視圖控制器作爲觀察者來管理上下文通知。 – Eimantas

+0

好的,抱歉再次更新。我剛剛發現委託方法被調用,它們在mainThread上。但是仍然沒有什麼事情發生在tableView上。可能需要更多的研究。 – Fogmeister

+0

啊!剛剛發現它(我認爲)myTableView ivar在通過委託方法時爲零。嗯...... – Fogmeister

回答

0

我會嘗試給你一些建議,並重定向到一些很好的鏈接。

首先,關於你的問題

我是否需要添加到NSFetchedResultsController「看」爲 合併?或者只是創造它足以做到這一點?

你可以只是簡單的設置,爲Eimantas提出的,viewController您使用作爲委託你NSFetchedResultsController。爲此,您需要實施NSFetchedResultsControllerDelegate類的方法。當上下文更新時,獲取的控制器將自動響應更改。

NSManagedObjectContextObjectsDidChangeNotification需要去哪裏查看 需要去哪裏?是否 確定在AppDelegate中(與NSFetchedResultsController所在的版本不同) 。

可以註冊併合並appDelegate中的更改。確保您註冊的通知來自您的上下文並在主線程中執行。

我還需要添加其他觀察員嗎?

不,NSFetchedResultsControllerDelegate沒問題。

有什麼我可以做的,看看哪裏會出錯?即 NSFetchedResultsControllerDelegate應該運行我可以堅持斷點的任何方法嗎?

首先,您可以看到核心數據通知是否包含您期望的對象。你可以簡單地爲它寫一個日誌。

我可以建議你閱讀這個SO問題(由我寫的)和相對的答案Jody Hagins。也許它可能有用。

NSFetchedResultsController doesn't show updates from a different context

如果可能的話,你可以更好地解釋你是什麼意思與

我有一個NSFetchedResultsController顯示從核心數據的數據。這 所有完美的作品。當有數據時,它顯示數據 ,一切正常。

您是否在另一個線程的Core Data插入中執行?

希望有所幫助。