ios - 为什么我会得到一个带有这个 NSMutableArray 代码的 NSFastEnumerationMutationHandler?

标签 ios objective-c cocoa-touch nsmutablearray nsarray

谁能帮我理解我在这里做错了什么会导致这个堆栈跟踪:

1   libobjc.A.dylib                 0x3a8a897a objc_exception_throw + 26
2   CoreFoundation                  0x32b7fd80 __NSFastEnumerationMutationHandler + 124
3   CoreFoundation                  0x32adbcee -[NSArray containsObject:] + 134

代码如下:

NSMutableArray *leftoverArray = [[NSMutableArray alloc] initWithArray:itemsArray];
for (NSDictionary *tempItem in tempItemsArray)
{
      if (![itemsArray containsObject:tempItem])
      {
           [itemsArray addObject:tempItem];
      }
      else
      {
           [leftoverArray removeObject:tempItem];
      }
}
for (NSDictionary *item in leftoverArray)
{
      [itemsArray removeObject:item];
}
[mainController.tblView reloadData];

tempItemsArray 通过以下方式传递给此类:

@property (nonatomic, strong) NSMutableArray *tempItemsArray;

我的应用中的其他地方确实有这段代码:

if (appDelegate.loading)
    appDelegate.tempItemsArray = itemsArray;
else
    appDelegate.itemsArray = itemsArray;
[tblView reloadData];

谢谢!

最佳答案

目前 tempItemsArray 和 itemsArray 是对同一个数组对象的引用。从技术上讲,您是在同时循环和修改同一个数组。

尝试为 tempItemsArray 或 itemsArray 复制数组:

if (appDelegate.loading)
    appDelegate.tempItemsArray = [NSMutableArray arrayWithArray:itemsArray];
else
    appDelegate.itemsArray = itemsArray;
[tblView reloadData];

关于ios - 为什么我会得到一个带有这个 NSMutableArray 代码的 NSFastEnumerationMutationHandler?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16974628/

相关文章:

javascript - 调整 UIWebView 文本的大小

ios - 如何对 UIViewController 进行单元测试 - TDD/BDD

iphone - 获取当前正在使用的 UIKeyBoardType?或者在 UIKeyboardType 发生变化时捕获

objective-c - 是否可以将 Swift 类转换为 C void* 指针?

iOS:NSClassFromString 为内部类返回 nil

objective-c - 后台线程将 UIImage 返回的结果为零

ios - 在 UITabBarController 中推送 ViewController

ios - Unity 应用程序启动时使用 Vungle 的 NSInvalidArgumentException

iphone - 如何实现iPhone的文件浏览设计

ios - 无限旋转 UIView 并暂停/停止动画,保持状态,并从当前状态继续旋转