2011-08-12 148 views
1

我的應用程序維護一些數據列表,用戶可能會隱藏某些行。隱藏/顯示按鈕位於編輯面板中,可通過將tableview置於編輯模式,然後選擇要編輯的行來進行訪問。這意味着在編輯模式下,所有的行都需要顯示出來,甚至是那些通常隱藏的行。否則將無法取消隱藏它們。從setEditing更改核心數據謂詞

我通過將fetchedResultsController設置爲nil來實現此目的,並在setEditing中重新加載表,然後修改構建fetchedResultsController謂詞的代碼,以檢查表是否處於編輯模式,如果是,跳過謂詞的一部分不包括隱藏的列表。因此,當用戶觸摸Edit按鈕時,表格會隨着所有行重新加載進入編輯模式,並且在返回時只重新加載未隱藏的行。

這工作正常,除了它已經殺死了進入和退出編輯模式時通常看到的動畫。額外的重新加載使它看起來很陡。如果在調用[super setEditing:animated]之前或之後執行重新加載,則沒有區別。

有沒有更好的方法或地方來做到這一點?

回答

0

使您的CD對象包含可見性屬性。當你進入編輯模式時,翻轉所有隱藏單元格的屬性。使fetchedResultsController的謂詞包含可見性屬性。如果您已實施回叫,它會自動添加表格單元格。

+0

這工作,謝謝!這並不是100%平滑,因爲表格在進入編輯模式的同時進行更新,但我認爲它可能是最好的。不過,仍然困惑爲什麼其他史蒂夫的建議沒有奏效。 – janineanne

1

來源:http://developer.apple.com/library/ios/#documentation/CoreData/Reference/NSFetchedResultsController_Class/Reference/Reference.html

修改獲取請求 你不能簡單地改變讀取請求修改結果。如果要更改提取請求,則必須執行以下操作:

  1. 如果您正在使用緩存,請將其刪除(使用deleteCacheWithName :)。 通常,如果您要更改提取 請求,則不應使用緩存。
  2. 更改提取請求。
  3. 調用performFetch:

看看是否能更好地工作,對破壞控制器和重裝表。

+0

該表不執行performFetch後更新,除非我使用重新加載,這是我試圖避免。我還需要做些什麼才能做到這一點? – janineanne