Ios 收藏<__NSArrayM:0x837cb90>;在枚举时发生了变异

Ios 收藏<__NSArrayM:0x837cb90>;在枚举时发生了变异,ios,objective-c,uitextfield,Ios,Objective C,Uitextfield,我试图在UItableview中从一个Uitextfield跳转到另一个UItableview,单击“下一步”按钮时,它会向我抛出错误消息:集合在枚举时发生了变化。而上一个按钮工作正常 当我是tableview的第二个最后一个单元格并且想要移动最后一个单元格时,就会发生这种情况。 下面是一些代码片段: - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)index

我试图在UItableview中从一个Uitextfield跳转到另一个UItableview,单击“下一步”按钮时,它会向我抛出错误消息:集合在枚举时发生了变化。而上一个按钮工作正常

当我是tableview的第二个最后一个单元格并且想要移动最后一个单元格时,就会发生这种情况。 下面是一些代码片段:

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{

    NSString *CellIdentifier = @"Cell";
    NSUInteger row = [indexPath row];

    CustomCell *Cell = ( CustomCell *)[tableView dequeueReusableCellWithIdentifier:CellIdentifier];

    if (Cell == nil)
    {

        // a new cell needs to be created
        Cell = [[CustomCell alloc] initWithStyle:UITableViewCellStyleDefault
                                         reuseIdentifier:CellIdentifier] ;
        Cell.selectionStyle = UITableViewCellSelectionStyleNone;
    }

    NSDictionary* product = [dataArray objectAtIndex:indexPath.row];
    Cell.lblProductContName.text=[product objectForKey:@"ProductContentsandName"];
    Cell.txtQty.delegate = self;
    Cell.txtQty.tag = 100 + row;
    Cell.txtQty.text=[txtFieldArray objectAtIndex:indexPath.row];

    return Cell;
}

“下一步”、“上一步”和“完成”按钮上的代码

- (void)onPrev:(id)sender
{
    NSArray *visiableCells = [self.myTableView visibleCells];
    [visiableCells enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop) {
        CustomCell *cell = (CustomCell *)obj;

        if (cell.txtQty.tag == selectedCellIndex) {
            [cell.txtQty resignFirstResponder];
        } else if (cell.txtQty.tag == selectedCellIndex - 1){
            [cell.txtQty becomeFirstResponder];
            *stop = YES;
        }

    }];

}

- (void)onNext:(id)sender
{

    NSArray *visiableCells = [self.myTableView visibleCells];


    [visiableCells enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop) {
            CustomCell *cell = (CustomCell *)obj;
            if (cell.txtQty.tag == selectedCellIndex) {
                [cell.txtQty resignFirstResponder];
            } else if (cell.txtQty.tag == selectedCellIndex + 1){
                [cell.txtQty becomeFirstResponder];
                *stop = YES;
            }

        }];

}

- (void)onDone:(id)sender
{
    NSArray *visiableCells = [self.myTableView visibleCells];

    [visiableCells enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop) {
        CustomCell *cell = (CustomCell *)obj;
        if (cell.txtQty.tag == selectedCellIndex) {
            [cell.txtQty resignFirstResponder];
        }


    }];

}

通过向表视图中的文本字段发送becomeFirstResponder消息,可以使其滚动。通过滚动visibleCells数组可以更改。由于这是在枚举此数组时发生的,因此会出现异常


但是你不需要在可见的单元格上迭代。只需使用UITableView方法cellForRowAtIndexPath:获取下一个或上一个单元格。你也不必亲自打电话给辞职的第一响应者。当新视图成为第一响应者时,旧视图会自动辞职。

通过向表视图内的文本字段发送becomeFirstResponder消息,可以使其滚动。通过滚动visibleCells数组可以更改。由于这是在枚举此数组时发生的,因此会出现异常


但是你不需要在可见的单元格上迭代。只需使用UITableView方法cellForRowAtIndexPath:获取下一个或上一个单元格。你也不必亲自打电话给辞职的第一响应者。当一个新视图成为第一个响应者时,旧视图会自动辞职。

很可能,但可能是因为键盘被隐藏/显示或另一个UI约束,我认为这取决于单元格的数量(尝试使用100个单元格可能会使它在最后一个适合屏幕的单元格中崩溃,而不会滚动)和表视图大小,即当您调用“辞职/成为第一响应者”(也称为“表视图”显示不同的单元格)时,可见单元格的数量发生了变化。首先尝试制作阵列的副本:


NSArray*visibleCells=[[self.myTableView visibleCells]复制]

很难预测,但可能是因为键盘被隐藏/显示,或者我认为另一个UI约束取决于单元格数量(尝试使用100个单元格可能会使其在最后一个适合屏幕的单元格中崩溃,而不滚动)和表视图大小,调用“辞职/成为第一响应者”时,可见单元格的数量会发生变化(也就是说,表格视图显示了不同的单元格)。首先尝试制作阵列的副本:


NSArray*visibleCells=[[self.myTableView visibleCells]复制]

代码格式?如果你修复了它,人们会更倾向于阅读你的问题。代码格式?如果你解决了这个问题,人们会更倾向于阅读你的问题。。更改代码后。它起作用了再次感谢感谢@Valentin。。更改代码后。很有效,再次感谢