Mam problemy z animowaniem zmian między sekcjami w UICollectionView
, mój program ulega awarii, co jest z nim nie tak?UICollectionView ulega awarii podczas zmiany kolejności elementów między sekcjami
Mam Zobacz kolekcję, która ma cztery sekcje:
0: A
1: B
2: C
3: D
Chcę przekształcić go mieć tylko trzy sekcje z tych samych przedmiotów:
0: A
1: B, C
2: D
I chcę, aby animować tej transformacji :
// Initial state
NSArray *source = @[ @[@"A"], @[@"B"], @[@"C"], @[@"D"] ];
// Some data source methods
- (NSInteger)collectionView:(UICollectionView *)collectionView numberOfItemsInSection:(NSInteger)section
{
return [source[section] count];
}
- (NSInteger)numberOfSectionsInCollectionView:(UICollectionView *)collectionView
{
return [source count];
}
// Transformation: that works but I have to keep an empty section
source = @[ @[@"A"], @[@"B", @"C"], @[@"D"], @[] ];
[collection performBatchUpdates:^{
[collection moveItemAtIndexPath:[NSIndexPath indexPathForItem:0 inSection:0]
toIndexPath:[NSIndexPath indexPathForItem:0 inSection:0]];
[collection moveItemAtIndexPath:[NSIndexPath indexPathForItem:0 inSection:1]
toIndexPath:[NSIndexPath indexPathForItem:0 inSection:1]];
[collection moveItemAtIndexPath:[NSIndexPath indexPathForItem:0 inSection:2]
toIndexPath:[NSIndexPath indexPathForItem:1 inSection:1]];
[collection moveItemAtIndexPath:[NSIndexPath indexPathForItem:0 inSection:3]
toIndexPath:[NSIndexPath indexPathForItem:0 inSection:2]];
} completion:nil];
// Transformation: that crashes!
source = @[ @[@"A"], @[@"B", @"C"], @[@"D"] ];
[collection performBatchUpdates:^{
[collection moveItemAtIndexPath:[NSIndexPath indexPathForItem:0 inSection:0]
toIndexPath:[NSIndexPath indexPathForItem:0 inSection:0]];
[collection moveItemAtIndexPath:[NSIndexPath indexPathForItem:0 inSection:1]
toIndexPath:[NSIndexPath indexPathForItem:0 inSection:1]];
[collection moveItemAtIndexPath:[NSIndexPath indexPathForItem:0 inSection:2]
toIndexPath:[NSIndexPath indexPathForItem:1 inSection:1]];
[collection moveItemAtIndexPath:[NSIndexPath indexPathForItem:0 inSection:3]
toIndexPath:[NSIndexPath indexPathForItem:0 inSection:2]];
[collection deleteSections:[NSIndexSet indexSetWithIndex:3]];
} completion:nil];
Ciągle pojawiają się awarie, albo wewnętrzne niepowodzenie asercji: Assertion failure in -[UICollectionView _endItemAnimations]...
, a czasami jeszcze bardziej dziwny błąd malloc: incorrect checksum for freed object...
.
Jeśli nie zadzwonię pod numer deleteSections:
, to również nie działa. Jeśli postawię pierwszy, to nic nie zmieni. Jeśli usuniemy moveItemAtIndexPath:toIndexPath:
, które mają to samo źródło i miejsce docelowe, nic nie zmieni. Jeśli nie zrobię tego w bloku wsadowym, to oczywiście ulega awarii przy pierwszym poleceniu. Czy przeoczyłem coś?
czy kiedykolwiek znalazłeś na to rozwiązanie? Wydaje się, że użycie moveItemAtIndexPath: toIndexPath: i deleteSections: w tej samej aktualizacji partii zawsze prowadzi do awarii, ale chciałby potwierdzenia. –