[英]iCloud and Core Data. NSFetchedResultsController doesn't update on initial sync
iCloud和Core Data運行良好。 除了...
在初始應用程序啟動時(現有的iCloud數據存在),NSFetchedResultsControllers不會在接收到的數據通過時更新。 NSFetchedResultsController委托只是不被調用。 在強制退出並重新啟動應用程序時,所有數據都應該存在。
核心數據代碼與此處的優秀教程相同。 我覺得這個代碼沒有錯,因為我已經將它用於另一個應用程序,並且沒有這個問題。
其他信息:我的托管對象上下文初始化為主隊列並發。 我唯一能想到的是,我可以捕獲初始數據 - 在應用程序最初啟動后幾秒鍾就會調用以下函數。 但是,盡管數據通過,但現有的獲取結果控制器似乎沒有相應更新(但是再次創建它們會顯示數據)。
- (void)storesWillChange:(NSNotification *)notification {
NSManagedObjectContext *context = self.managedObjectContext;
[context performBlockAndWait:^{
NSError *error;
if ([context hasChanges]) {
BOOL success = [context save:&error];
if (!success && error) {
// perform error handling
NSLog(@"%@",[error localizedDescription]);
}
}
[context reset];
}];
}
那么:我該怎么做才能開始查明為什么NSFetchedResultsControllers沒有按原樣更新?
我在這里猜一點,但想想因為你在保存后立即重置上下文,NSFetchedResultsController委托方法由於重置而沒有在這上面。 我的意思是委托方法旨在處理當前結果集中更改的記錄選擇(插入,更新或刪除當前由提取的結果控制器跟蹤的記錄)。
當您執行上下文重置時,您將所有這些都吹走,因此這些委托方法不會被調用,因為它們跟蹤的內容不再以它識別的形式存在。
每當我由於傳入的iCloud更新而重置上下文時,我通常會確保為新重置的上下文重新創建我的獲取結果控制器。
強制退出應用程序將強制在重新啟動時重新創建獲取的結果控制器,從而顯示您希望看到的數據。
在應用程序啟動時初始化托管對象上下文。 然后與iCloud同步並重新加載表它將正常工作。 當我遇到同樣的問題時,我也做了同樣的事情。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.