我有一個由NSFetchedResultsController驅動的300單元的collectionview。每隔一段時間,所有的對象都會更新,所以我收到了委託消息,告訴我這樣做,並且我讓集合視圖像tableview一樣處理更新。不幸的是,每次發生這種情況時,它會將主線程鎖定幾秒鐘...我不知道爲什麼。這是我的代碼:UICollectionView鎖定主線程~10秒執行批次更新
-(void)controllerDidChangeContent:(NSFetchedResultsController *)controller
{
[self.cascadeViewController.collectionView performBatchUpdates:^{
NSLog(@"performingBatchUpdates");
for (NSDictionary *change in self.changes) {
[change enumerateKeysAndObjectsUsingBlock:^(NSNumber *key, id obj, BOOL *stop) {
NSFetchedResultsChangeType type = [key unsignedIntegerValue];
if (type == NSFetchedResultsChangeInsert) {
[self.cascadeViewController.collectionView insertItemsAtIndexPaths:@[obj]];
} else if (type == NSFetchedResultsChangeDelete) {
[self.cascadeViewController.collectionView deleteItemsAtIndexPaths:@[obj]];
} else if (type == NSFetchedResultsChangeUpdate) {
[self.cascadeViewController.collectionView reloadItemsAtIndexPaths:@[obj]];
} else if (type == NSFetchedResultsChangeMove) {
[self.cascadeViewController.collectionView moveItemAtIndexPath:obj[0] toIndexPath:obj[1]];
}
}];
}
NSLog(@"performingBatchUpdates end");
} completion:^(BOOL finished) {
NSLog(@"completion");
// TODO: implement
// [self configureMessageAndFooterView];
}];
NSLog(@"end of method");
[self.changes removeAllObjects];
}
這是怎麼回事?所有300個同時更新的對象不會在我的應用程序的實際執行過程中不斷髮生,但足以讓我擔心它。我正在使用股票UICollectionViewFlowLayout - 我需要做更多的定製?
你應該分析它。 –
我有 - 它在內部API調用上做了很多工作。它擊中了[UICollectionViewUpdate _computeGaps],並且似乎對NSArrays和indexPath比較進行了很多排序。似乎沒有調用任何可以修改的委託方法,或者我可以替換的UICollectionViewFlowLayout方法。 –
您是否同時解決了這個問題?我在我的collectionview中將600個項目同樣的問題鎖定了主線程20秒! – stefreak