为了简单起见,我有一个简单的基于 UICollectionView 的应用程序 - 一个 UICollectionView 和一个基于 NSMutableArray 的数据模型。
我可以通过 didSelectItemAtIndexPath: 委托方法毫无问题地删除单元格:
-(void)collectionView:(UICollectionView *)collectionView didSelectItemAtIndexPath:(NSIndexPath *)indexPath{
[self.data removeObjectAtIndex:[indexPath row]];
[self.collectionView deleteItemsAtIndexPaths:@[indexPath]];
}
但是,我正在尝试通过 aUIMenuController
在UICollectionViewCell
子类中添加一个删除选项,该选项是通过 a 触发的UILongPressGestureRecognizer
,一切正常,我成功触发了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)
也许更新为空后的索引路径很重要......
有任何想法吗?