2013-09-30 72 views
4

我有一個UICollectionView顯示NSFetchedResultsController的內容。 collectionView有一個部分,在該部分有一個標題。標題允許用戶過濾集合視圖中的內容。標題視圖的代理連接到包含集合視圖的UIViewControllerUICollectionView內容在reloadData後隱藏

只要用戶更改其中一個篩選選項,標題視圖就會向其委託發送消息。代表在其的fetchRequest上更改謂詞,並調用-[NSFetchedResultsController performFetch:]。接下來,必須通知收集視圖內容已更改。這可以通過幾種方式完成,但我更喜歡的方式是撥打-[UICollectionView reloadData]。不幸的是,這種方法不能像預期的那樣工作:當我調用這個方法時,整個集合視圖就會消失。這些都是一些我提出的意見對這個問題的:

  1. 所有單元,第一個(也是唯一一個)部分的標題有其hidden標誌設置爲YES。我試圖通過在-[UIView setHidden:]上設置一個符號斷點來跟蹤造成這種情況的方法。不幸的是,它從來沒有打破UICollectionView子視圖。
  2. collectionView:cellForItemAtIndexPath:在撥打-[UICollectionView reloadData]後永遠不會被調用。
  3. collectionView:viewForSupplementaryElementOfKind:atIndexPath:在撥打-[UICollectionView reloadData]後不會被調用。
  4. numberOfSectionsInCollectionView:仍然被調用,仍然返回正確的數字(在這種情況下爲1)。
  5. collectionView:numberOfItemsInSection仍然被調用,仍然返回正確的數字(在這種情況下爲1)。

我迄今試圖解決這一問題:

  1. UICollectionViewFlowLayout實例
  2. UICollectionView實例禁用所有自定義(separatorInset)禁止所有自定義(sectionInsetitemSize
  3. 將標題作爲子視圖添加到UICollectionView並相應地設置contentInset。不幸的是,UICollectionView不喜歡我在自動佈局約束和崩潰時忍受痛苦。
  4. 致電[UICollectionView reloadSections:]而不是[UICollectionView reloadData]。這有效,但我不喜歡動畫。
  5. 手動插入,刪除和更新第一部分中的行。只要包含集合視圖的視圖控制器位於內存中,它就會工作。只要它解除分配,應用程序崩潰在-[UICollectionView dealloc]斷言失敗。

這感覺不對有頭設置這種方式,但不幸的是UICollectionView沒有全局頭像UITableViewtableHeaderView)。

+0

嘿,已經找到了解決辦法? –

+0

不,我不記得找到解決方案 – datwelk

+0

好的,謝謝你的迴應。 –

回答

4

嘗試重新加載它們在主線程

dispatch_async(dispatch_get_main_queue(), ^{ 
[self.collectionView reloadData]; 
}); 

它爲我工作