应用程序崩溃说集合表达式类型 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 崩溃

UIView removeFromSuperview 导致应用程序崩溃

添加 UICollectionViewController 作为子 UIView 崩溃

UIViewController 中的集合视图可选展开崩溃