我建設使用RestKit和NSFetchedResultsController在我ViewControllers就像下面這個教程說明iOS應用:http://www.alexedge.co.uk/blog/2013/03/08/introduction-restkit-0-20如何更新NSFetchedResultsController?
我有一個顯示由NSFetchedResultsController獲取的數據一個UITableViewController的子類,它工作得很好。
現在我要過濾顯示的數據,所以我添加一個謂詞的NSFetchedResultsController的讀取請求,並執行再次獲取(我不使用任何緩存):
[self.fetchedResultsController.fetchRequest setPredicate:[NSPredicate predicateWithFormat:@"title like 'some text'"]];
NSError *error = nil;
[self.fetchedResultsController performFetch:&error];
NSAssert(!error, @"Error performing fetch request: %@", error);
沒有錯誤發生但表格視圖未更新。我期待這種方法被稱爲
- (void)controllerDidChangeContent:(NSFetchedResultsController *)controller;
,但它不是...
更糟的是,當我登錄獲取對象的數量這樣
NSLog(@"before refetch : %d objects", self.fetchedResultsController.fetchedObjects.count);
[...]
NSLog(@"after refetch : %d objects", self.fetchedResultsController.fetchedObjects.count);
我越來越
before refetch : 18 objects
after refetch : 0 objects
(這可能是爲什麼我的應用程序崩潰,只要我嘗試滾動表視圖)
那麼我應該如何刷新NSFetchedResultsController的內容,以便controllerDidChangeContent被調用,從而我可以重新加載表視圖?同時又有fetchedObjects包含的東西...
編輯: 如果在這一刻我叫RestKit對象管理器以獲得在表視圖中顯示的數據與互聯網連接可用的,則NSFetchedResultsController更新,並且表視圖以及與謂詞的獲取請求的正確結果。
編輯: 我使用的謂詞是問題的原因(我認爲)。我的實體具有從字符串JSON陣列和謂語測試解析的變形屬性,如果陣列中存在搜索字符串:
[NSPredicate predicateWithFormat:@"ANY transformable_attribute like 'search string'"]
怪異的事情是,如果我加載不謂詞的結果,並將其添加然後我得到0對象,但如果我直接用謂詞加載結果,那麼我得到3個對象。 我的謂詞錯了嗎?
編輯:是的!看起來我們不能預測可變形屬性。我不知道它爲什麼第一次運作。
這是它的怪異部分。當我第一次加載結果時,我得到18個對象,然後當我添加謂詞時,我得到0對象。但是如果我第一次用謂詞加載結果,那麼我得到3個對象 – Alexis
在兩種情況下,謂詞或謂詞不同。 – Mundi