Löschen von Zellen aus UICollectionView über NSNotification

Ich habe eine einfache UICollectionView-basierte App - eine UICollectionView und ein NSMutableArray-basiertes Datenmodell zur Vereinfachung.

Ich kann Zellen problemlos über die didSelectItemAtIndexPath: delegate-Methode löschen:

-(void)collectionView:(UICollectionView *)collectionView didSelectItemAtIndexPath:(NSIndexPath *)indexPath{
    [self.data removeObjectAtIndex:[indexPath row]];
    [self.collectionView deleteItemsAtIndexPaths:@[indexPath]];
}

Ich versuche jedoch, eine Löschoption über a hinzuzufügenUIMenuController in einemUICollectionViewCell Unterklasse, die über a ausgelöst wirdUILongPressGestureRecognizer was alles gut funktioniert und ich triggere erfolgreich einNSNotification

-(void)delete:(id)sender{
      NSLog(@"Sending deleteme message");
      [[NSNotificationCenter defaultCenter] postNotificationName:@"DeleteMe!" object:self userInfo:nil];
}

Ich fange es in meinem ViewController ab und rufe die folgende Methode auf:

-(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]];
       }
}

Und es stürzt beim Aufruf von deleteItemsAtIndexPaths: ab

-[UICollectionViewUpdateItem action]: unrecognized selector sent to instance 0xee7eb10

Ich habe alles Offensichtliche überprüft - wie das Objekt aus NSNotification und das aus indexPathForCell: call erstellte indexPath, und alles scheint völlig in Ordnung zu sein. Es scheint, als würde ich deleteItemsAtIndexPath aufrufen: mit denselben Informationen an beiden Stellen, aber aus irgendeinem Grund schlägt dies fehl, wenn es über die Benachrichtigungsroute gesendet wird.

Dies ist die Information an der im Fehler angegebenen Adresse:

(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)

Möglicherweise ist der Indexpfad nach der Aktualisierung von Null bedeutsam ...

Irgendwelche Ideen?

Antworten auf die Frage(3)

Ihre Antwort auf die Frage