我在iOS6上为我的应用找到了一个奇怪的错误。
我正在使用Collection视图来表示"树结构"为我的应用程序。每个单元格里面都有一个tableview,当我在表格视图中选择一个单元格时,我用另一个tableview推送一个新的集合视图单元格。
在树"的根目录中选择tableview单元格时,我需要清除其他集合视图单元格,并显示新的单元格视图单元格。我是这样做的:
for(id e in oldData)
{
if(i < indexPath.row)
{
[newData addObject:e];
}
else
{
[indexPaths addObject:[NSIndexPath indexPathForItem:i inSection:indexPath.section]];
}
i++;
}
self.tree = newData;
[self.collectionView deleteItemsAtIndexPaths:indexPaths];
这在iOS7中非常出色。但是,在iOS6中,我有时会获得此异常:
'NSInvalidArgumentException', reason: '-[UICollectionViewUpdateItem action]: unrecognized selector sent to instance 0xa3eedd0'
此行例外发生
[self.collectionView deleteItemsAtIndexPaths:indexPaths];
我发现了一些关于这个特定问题的线索,但它似乎与iOS6上的键盘外观有关。
如何在iOS6上找到此错误的解决方法?
感谢。
编辑:
我认为问题的原因是这个。检查我的新问题: Subclassing UICollectionViewFlowLayout sometimes crashes on iOS6
答案 0 :(得分:2)
参考Docs 请确保以下事项:
indexPaths
参数不得为nil
。 (另外,您应该检查indexPaths
是否没有当前集合视图中不存在的任何索引)e.g。
[indexPaths removeAllObjects];
for(id e in oldData)
{
if(i < indexPath.row)
{
[newData addObject:e];
}
else
{
[indexPaths addObject:[NSIndexPath indexPathForItem:i inSection:indexPath.section]];
}
i++;
}
self.tree = newData;
if([indexPaths count])
[self.collectionView deleteItemsAtIndexPaths:indexPaths];
希望这有帮助。
答案 1 :(得分:1)
我之前遇到过类似的问题。
我在调用deleteItem方法之前辞职了。
[[UIApplication sharedApplication].keyWindow findAndResignFirstResponder];
希望它有所帮助。
答案 2 :(得分:-1)
可靠地解雇键盘是这样的:
[self.view endEditing:YES];
此外,您可能有更新问题,请使用:
[tableView beginUpdates];
// make changes
[tableView endUpdates];
在更新UIKit视图时始终在主线程上。
最坏情况,imeplement操作因此单元格确实响应了选择器[UICollectionViewUpdateItem action]:
-(SEL) action{
// break here to find thread that is calling me!
return nil;
}