gpt4 book ai didi

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

转载 作者:可可西里 更新时间:2023-11-01 03:36:40 24 4
gpt4 key购买 nike

有许多标题相似的问题,但没有一个对我有帮助。

但我可以联系这个 'NSGenericException', reason: Collection <__NSArrayM: 0x7fabb400> was mutated while being enumerated 的解决方案问我的问题。 因为这种终止正在发生当我添加、删除带有数组的字符串对象时。

错误:

由于未捕获的异常“NSGenericException”而终止应用程序,原因:“*** 集合 <__NSArrayM: 0x7fa1f2711910> 在枚举时发生了变异。”

首先抛出调用栈:

(

0 CoreFoundation 0x00000001087b8c65 __exceptionPreprocess + 165
1 libobjc.A.dylib 0x0000000108422bb7 objc_exception_throw + 45
2 CoreFoundation 0x00000001087b85c4 __NSFastEnumerationMutationHandler + 132
3 0x0000000107e24cf5 -[ProfessionalRegSecond tableView:didDeselectRowAtIndexPath:] + 773
4 UIKit 0x0000000109759d71 -[UITableView _deselectRowAtIndexPath:animated:notifyDelegate:] + 347
5 UIKit 0x000000010974deea -[UITableView _userSelectRowAtPendingSelectionIndexPath:] + 187
6 UIKit 0x000000010968062c _applyBlockToCFArrayCopiedToStack + 314
7 UIKit 0x00000001096804a6 _afterCACommitHandler + 533
8 CoreFoundation 0x00000001086ebca7 __CFRUNLOOP_IS_CALLING_OUT_TO_AN_OBSERVER_CALLBACK_FUNCTION__ + 23
9 CoreFoundation 0x00000001086ebc00 __CFRunLoopDoObservers + 368
10 CoreFoundation 0x00000001086e1a33 __CFRunLoopRun + 1123
11 CoreFoundation 0x00000001086e1366 CFRunLoopRunSpecific + 470
12 GraphicsServices 0x000000010d6c8a3e GSEventRunModal + 161
13 UIKit 0x000000010965c900 UIApplicationMain + 1282
14 0x0000000107de14cf main + 111
15 libdyld.dylib 0x000000010b585145 start + 1
)

libc++abi.dylib:以 NSException 类型的未捕获异常终止

我想做什么:

我需要这样的数组,当我选择单元格时,我想将该对象添加到数组中,当我取消选择行时,我想从数组中删除该行,因此结果数组将仅是选定的条目。如何做到这一点?

这是我的代码

@implementation Professional

{
NSMutableArray *updatedLocalityArray; // alloc,init did in viewDidLoad
NSString *toCheck;
}

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath

{

UITableViewCell *tableViewCell = [tableView cellForRowAtIndexPath:indexPath];

NSLog(@"%@",tableViewCell.textLabel.text);

toCheck = tableViewCell.textLabel.text;
[updatedLocalityArray addObject:toCheck];
NSLog(@"%@ *****", updatedLocalityArray);

}

- (void)tableView:(UITableView *)tableView didDeselectRowAtIndexPath:(NSIndexPath *)indexPath
{

UITableViewCell *tableViewCell = [tableView cellForRowAtIndexPath:indexPath];
NSLog(@"%@",tableViewCell.textLabel.text);

for (NSString *test in updatedLocalityArray)
{
if ([test isEqualToString:tableViewCell.textLabel.text])
{

[updatedLocalityArray removeObject:test];
NSLog(@"%@ *****", updatedLocalityArray);

}

}

}

最佳答案

您不能在迭代 NSMutableArray 时删除项目。

有几种解决方法:

  • 迭代数组的副本

  • 使用基于索引的 for 循环代替 for each 语法。

不复制数组可以节省分配和几个 CPU 周期:

for (int i = updatedLocalityArray.count-1 ; i >= 0 ; i--)
{
NSString *test = updatedLocalityArray[i];
if ([test isEqualToString:tableViewCell.textLabel.text])
{
[updatedLocalityArray removeObjectAtIndex:i];
NSLog(@"%@ *****", updatedLocalityArray);
}
}

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

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