gpt4 book ai didi

ios - 集合 <__NSArrayM : 0x837cb90> was mutated while being enumerated

转载 作者:行者123 更新时间:2023-11-28 18:36:53 24 4
gpt4 key购买 nike

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

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

- (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];
}


}];

}

最佳答案

通过向 TableView 内的文本字段发送 becomeFirstResponder 消息,您可以使其滚动。通过滚动 visibleCells 数组得到改变。由于这是在您枚举此数组时发生的,因此您会得到异常。

但您不需要遍历可见单元格。只需使用 UITableView 方法 cellForRowAtIndexPath: 获取下一个或上一个单元格。此外,您不必自己调用 resignFirstResponder。当新 View 成为第一响应者时,旧 View 会自动辞职。

关于ios - 集合 <__NSArrayM : 0x837cb90> was mutated while being enumerated,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17252381/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com