2014-12-07 52 views
6

我有一個簡單的UICollectionView。第一次加載視圖時,cellForItemAtIndexPath被調用三次,我看到三個單元格。UICollectionView:重裝數據調用numberOfItemsInSection但不cellForItemAtIndexPath

- (NSInteger)collectionView:(UICollectionView *)view numberOfItemsInSection:(NSInteger)section { 
    NSUInteger count = ([self.results count] > 0 ? [self.results count] : 3); 
    NSLog(@"count %lu", (unsigned long)count); 
    return count; 
} 

- (UICollectionViewCell *)collectionView:(UICollectionView *)cv cellForItemAtIndexPath:(NSIndexPath *)indexPath { 
    NSLog(@"cellForItemAtIndexPath called"); 
    UICollectionViewCell *cell = [cv dequeueReusableCellWithReuseIdentifier:@"TasteCell" forIndexPath:indexPath]; 
    cell.backgroundColor = [UIColor whiteColor]; 
    return cell; 
} 

不過,後來self.results變成5個元素的數組,我呼籲:

[self.collectionView reloadData]; 

發生這種情況時,numberOfItemsInSection又被稱爲與「計數」日誌語句存在表明,它返回5.然而,這一次,cellForItemAtIndexPath不會被調用,而UI仍然顯示從第一負載三個單元。

即使計數已更改,爲什麼單元格數量未更新?

+0

也許這個答案可能有所幫助:http://stackoverflow.com/a/19100840/2274694 – 2014-12-07 04:20:47

+0

UICollectionView&UITableView只更新視圖中的可見單元格。 – NANNAV 2014-12-07 05:13:09

+0

如果我嘗試一下Lyndsey提示它抱怨說我更改了計數而沒有插入和刪除項目:'NSInternalInconsistencyException',原因:'無效更新:部分0中的項目數目無效。更新(5)必須更新(3)之前等於包含在該部分的項目數,加或減插入或從該部分(0插入時,0刪除)和加上或刪除的項目的數量減去的數物品移入或移出該部分(0移入,0移出)。' – theraju 2014-12-07 05:41:35

回答

1

嘗試爲UICollectionView再次設置數據源和委託,然後重新加載它。

-(void)reloadCollectionView { 
    mycollectionView.dataSource = self; 
    mycollectionview.delegate = self; 
    [mycollectionview reloadData]; 
} 
+0

都能跟得上同NSInternalInconsistencyException。想知道如果這個問題:http://stackoverflow.com/questions/12611292/uicollectionview-assertion-failure – theraju 2014-12-08 07:36:28

1

我想,可能是你正在使用static collection view cell的概念。 如果其靜態的,在你的XIB /故事板將其更改爲動態。

0

請檢查您是否已將collectionView的數據源和代理連接到您的視圖控制器。 如果不這樣做

 -(void)viewDidLoad 
      { 
       [super viewDidLoad]; 
       mycollectionView.dataSource = self; 
       mycollectionview.delegate = self; 
      } 

希望這會幫助你。

相關問題