应用程序崩溃说集合表达式类型 UIView*' 可能无法响应 'countByEnumeratingWithState:object:count"'
Posted
技术标签:
【中文标题】应用程序崩溃说集合表达式类型 UIView*\' 可能无法响应 \'countByEnumeratingWithState:object:count"\'【英文标题】:App crashes saying Collection expression type UIView*' may not respond to 'countByEnumeratingWithState:object:count"'应用程序崩溃说集合表达式类型 UIView*' 可能无法响应 'countByEnumeratingWithState:object:count"' 【发布时间】:2014-03-13 05:59:46 【问题描述】:我在 tableView 中有一个 UIImageView
,并希望在单击该行时以编程方式将其删除。
-(void) tableView:(UITableView *) tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
for (UIView *subview in tableView)
if([subview isKindOfClass:[UIImageView class]])
[subview removeFromSuperview];
当我单击表格行时应用程序崩溃。 Warning : Collection expression type UIView* may not respond to countByEnumeratingWithState:object:count"
为应用程序崩溃提交了相同的消息。我在这里错过了什么?我只粘贴了相关的代码部分。
【问题讨论】:
【参考方案1】:代码应该是这样的
for (UIView *subview in tableView.subviews)
【讨论】:
这实际上也回答了我的问题!但我不确定为什么。你有什么见解吗? @narner 在问题中他试图删除 tableView 的子视图,但他错误地编写了类似for (UIView *subview in tableView)
的迭代。这里tableView
是一个单一的视图。我们应该得到它的子视图tableView.subviews
。【参考方案2】:
将循环改为
for (UIView *subview in [tableView subviews])
if([subview isKindOfClass:[UIImageView class]])
[subview removeFromSuperview];
【讨论】:
【参考方案3】:试试下面的代码。它可能会帮助你..
-(void) tableView:(UITableView *) tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
NSArray *cells = [tableView visibleCells];
UITableViewCell *currentCell = nil;
for (UITableViewCell *cell in cells)
NSIndexPath *currentIndexPath = [tableView indexPathForCell:cell];
if(currentIndexPath.row == indexPath.row && currentIndexPath.section == indexPath.section)
currentCell = cell;
break;
for(UIView *subView in [[currentCell contentView] subviews])
// do your stuff.
【讨论】:
以上是关于应用程序崩溃说集合表达式类型 UIView*' 可能无法响应 'countByEnumeratingWithState:object:count"'的主要内容,如果未能解决你的问题,请参考以下文章
使用 setCollectionViewLayout 会导致崩溃,说 layoutAttributesForItemAtIndexPath not found
条件绑定的初始化程序必须具有可选类型,而不是“UIView”
UIView removeFromSuperview 导致应用程序崩溃