Mam prostą aplikację opartą na UICollectionView - jeden model danych oparty na UICollectionView i NSMutableArray dla uproszczenia.Usuwanie komórek z UICollectionView poprzez NSNotification
mogę usunąć komórki bez problemu poprzez didSelectItemAtIndexPath: metodę Delegat:
-(void)collectionView:(UICollectionView *)collectionView didSelectItemAtIndexPath:(NSIndexPath *)indexPath{
[self.data removeObjectAtIndex:[indexPath row]];
[self.collectionView deleteItemsAtIndexPaths:@[indexPath]];
}
Jednak próbuję dodać opcję kasowania poprzez UIMenuController
w UICollectionViewCell
podklasy, który jest wyzwalane przez UILongPressGestureRecognizer
który wszystko działa dobrze i skutecznie wyzwalać NSNotification
-(void)delete:(id)sender{
NSLog(@"Sending deleteme message");
[[NSNotificationCenter defaultCenter] postNotificationName:@"DeleteMe!" object:self userInfo:nil];
}
złapię go w moim ViewController i wywołać w następujący sposób:
-(void)deleteCell:(NSNotification*)note{
MyCollectionViewCell *cell = [note object];
NSIndexPath *path = nil;
if((path = [self.collectionView indexPathForCell:cell]) != nil){
[self.data removeObjectAtIndex:[path row]];
[self.collectionView deleteItemsAtIndexPaths:@[path]];
}
}
I to wywala na deleteItemsAtIndexPaths call
-[UICollectionViewUpdateItem action]: unrecognized selector sent to instance 0xee7eb10
Sprawdziłem wszystko oczywiste - jak obiekt z NSNotification i indexPath utworzonego z indexPathForCell: zadzwonić i wszystko wydaje się całkowicie w porządku. Wygląda na to, że nazywam deleteItemsAtIndexPath: z tymi samymi informacjami w obu miejscach, ale z jakiegoś powodu nie powiedzie się, gdy przechodzi przez trasę powiadomienia.
to info na adres podany w błąd:
(lldb) po 0xee7eb10
(int) $1 = 250080016 <UICollectionViewUpdateItem: 0xee7eb10> index path before update (<NSIndexPath 0x9283a20> 2 indexes [0, 0]) index path after update ((null)) action (delete)
Może ścieżka indeksu po aktualizacji jest null jest znacząca ...
jakieś pomysły?
W 'deleteCell:' 'self.collectionViewOne' używasz i' self.collectionView' - Czy to celowo? –
Przepraszam - to było jak literówka. – melps
Mogę potwierdzić, że dzieje się tak również podczas wstawiania nowych elementów z powiadomienia. – Brett