2013-07-30 44 views
0

我有需要能夠動態地創建NSFetchedResultsController,並且很好奇,如果這甚至是可能的。這樣做的基礎是我需要能夠基於變量獲取結果。據我的理解,我需要多個NSFRC來處理多個請求(這將是一個UISegmentControl TableView)。問題是我不知道我需要多少個控制器,因爲它根據API返回的內容而變化。動態創建NSFetchedResultsController

有沒有更好的方法,我可以不只是傳遞一個變量給NSFRC作爲謂詞嗎?

尋找最好的選擇來處理這個問題。

一個例子是:

我有13種不同的狀態的工作(打開,暫掛,註銷等),獲取所有作業然後運行該過濾器將極大的應用程序返回〜50K的記錄放緩。

所以我的目的是獲取狀態'使用狀態作爲謂詞,然後從該狀態的API作業中獲取。

我最好的方法是什麼?

+1

你不想爲每個狀態有不同的部分?是的,您可以通過傳遞獲取請求的方法創建FRC。 – Wain

+0

你甚至可以有多個NSFetchResultsController在同一個tableview上工作(可以說有一個部分) –

+0

是的,我知道我可以有多個,問題是,我不知道需要多少,直到我做第一個請求狀態'。 –

回答

0

您可以毫無問題地修改NSFetchedResultsControllerNSFetchRequest。有關此主題的文檔中有一個特殊部分。如果您使用緩存,則需要將其刪除,之後您可以更改提取請求並在您的NSFetchedResultsController上再次撥打performFetch:。訣竅是修改您的控制器上的現有NSFetchRequest,而不是試圖設置新的獲取請求,這將無法正常工作。

在你的情況,你可能想通過調用-[NSFetchRequest setPredicate:]

[NSFetchedResultsController deleteCacheWithName:cacheName]; 
[self.controller.fetchRequest setPredicate:[NSPredicate predicateWithFormat:@"status == %@", currentStatus]]; 
NSError* error = nil; 
if (![self.controller performFetch:&error]) { 
    NSLog(@"Error updating fetch: %@", error); 
} 

這應該做你想要的設置提取請求的斷言。

+0

所以這將由UISegmentControl觸發? –

+0

是的,如果您使用UISegmentedControl更改過濾器,則會在控件觸發的操作中進行。 –

+0

這工作很好,謝謝你!但是,有一件事情,如果我的結果之一返回0節,然後過濾到另一個返回0,我得到一個崩潰,說它不能刪除0節0節。我明白爲什麼發生這種情況只是不知道如何解決它。有任何想法嗎? –