這是我的場景:UITableView - reloadData或reloadRowsAtIndexPaths:
我有一個標籤的單元格。當我第一次加載單元格時,模型可能沒有標籤所需的數據...因此,當我(通過委託調用)發現模型剛剛獲得了標籤數據或標籤數據已更改時,我可以重新加載特定的單元格。我需要重新加載單元格(而不是僅設置標籤的文本)的原因是,它的高度可能會根據標籤是否包含文本而發生變化。
下面是我在做我的委託電話是什麼:
- (void)modelLabelDataDidChangeForModel:(NSString *)modelId
{
NSIndexPath *indexPath = [self indexPathForModel:modelId]; // Local method to get index path.
MyCell *cell = (MyCell *) [self.table cellForRowAtIndexPath:indexPath];
if (cell) {
[self.table beginUpdates];
[cell updateMostImportantContent];
[self.table reloadRowsAtIndexPaths:@[indexPath] withRowAnimation:UITableViewRowAnimationNone];
[self.table endUpdates];
}
}
我得到在endUpdates
崩潰(*** Assertion failure in -[UITableView _endCellAnimationsWithContext:]
),因爲它說的行數後,更新不匹配的數量更新之前的行(因爲我沒有在更新塊中顯式地添加/刪除任何行;我只是重新加載了1行)。
因此,這使得我認爲該模型可能同時進行了2次更改:標籤數據正在改變1個項目(因此我的委託調用),但隨後也將一個項目添加到模型中因此崩潰)。
所以這讓我覺得,我怎麼能告訴我是否需要撥打reloadData
或我是否可以重新加載1單元格reloadRowsAtIndexPaths:@[indexPath]
?
我是否必須跟蹤模型本身,還是有什麼我可以做的表視圖來確定這一點,並避免崩潰?
我的目標是高效:當我需要時致電reloadData
,但我可以時致電reloadRowsAtIndexPath:@[indexPath]
。
當我剛剛使用了beingUpdates/endUpdates時,我得到了崩潰...所以我嘗試了使用reloadRowsAtIndexPaths方法,但它沒有解決它。所以我試着把它們合併。沒有工作。 –