シンプルなUICollectionViewベースのアプリがあります.1つのUICollectionViewとNSMutableArrayベースのデータモデルです。
didSelectItemAtIndexPath: デリゲート メソッドを使用して問題なくセルを削除できます。
-(void)collectionView:(UICollectionView *)collectionView didSelectItemAtIndexPath:(NSIndexPath *)indexPath{
[self.data removeObjectAtIndex:[indexPath row]];
[self.collectionView deleteItemsAtIndexPaths:@[indexPath]];
}
UIMenuController
ただし、 a を介してトリガーされるUICollectionViewCell
サブクラスの a を介して削除オプションを追加しようとしていますが、UILongPressGestureRecognizer
これはすべて正常に機能し、 a を正常にトリガーしますNSNotification
-(void)delete:(id)sender{
NSLog(@"Sending deleteme message");
[[NSNotificationCenter defaultCenter] postNotificationName:@"DeleteMe!" object:self userInfo:nil];
}
ViewController でそれをキャッチし、次のメソッドを呼び出します。
-(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]];
}
}
そして、deleteItemsAtIndexPaths: 呼び出しでクラッシュします。
-[UICollectionViewUpdateItem action]: unrecognized selector sent to instance 0xee7eb10
NSNotification のオブジェクトや indexPathForCell: 呼び出しから作成された indexPath など、明らかなことはすべて確認しましたが、すべて問題ないようです。どちらも同じ情報で deleteItemsAtIndexPath: を呼び出しているようですが、なぜか通知ルートを経由すると失敗します。
これは、エラーで指定されたアドレスの情報です。
(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)
おそらく、更新後のインデックス パスが null であることは重要です...
何か案は?