簡體   English   中英

iCloud和核心數據。 NSFetchedResultsController在初始同步時不會更新

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM