Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/93.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios NSMutableArray:使用数组初始化时缺少数据_Ios_Objective C_Nsmutablearray_Init - Fatal编程技术网

Ios NSMutableArray:使用数组初始化时缺少数据

Ios NSMutableArray:使用数组初始化时缺少数据,ios,objective-c,nsmutablearray,init,Ios,Objective C,Nsmutablearray,Init,正如屏幕截图所示,谁知道它有什么问题?谢谢你的帮助 您正在从正在迭代的数组中删除对象。 这是一种很糟糕的做法,可能会导致这样的错误 你只需更换 for (NSString *code in list) 与: for (NSString *code in codeList) 在迭代时,不要从数组、字典或任何集合集中删除对象。 保留迭代时要删除的索引,然后删除所有对象。您可以使用indexesOfObjectsPassingTest方法: NSMutableArray * list = [NSM

正如屏幕截图所示,谁知道它有什么问题?谢谢你的帮助


您正在从正在迭代的数组中删除对象。 这是一种很糟糕的做法,可能会导致这样的错误

你只需更换

for (NSString *code in list)
与:

for (NSString *code in codeList)

在迭代时,不要从数组、字典或任何集合集中删除对象。 保留迭代时要删除的索引,然后删除所有对象。您可以使用
indexesOfObjectsPassingTest
方法:

NSMutableArray * list = [NSMutableArray arrayWithArray:codeList];

NSIndexSet * indexesToRemove = [list indexesOfObjectsPassingTest:^BOOL(NSString *code, NSUInteger idx, BOOL *stop) {
    return [self.codeMapping.allKeys containsObject:code];
}];

[list removeObjectsAtIndexes:indexesToRemove];

您应该使用indexesOfObjectsPassingTest和ObjectSatiIndexes来实现这一点:即使您遵循Anbu的回复使代码正常工作,这段代码也以O(n^2)的形式运行。用一个100000个对象的列表来做,其中每一个对象被删除一秒,你的应用程序就会因为CPU时间不足而死掉

在您的查找中,只需放置
代码列表
,您的问题就会得到解决。 检查这个,我修改了你的方法

-(NSArray *) checkVisibleCode:(NSArray *) codeList{
    NSMutableArray *list = [NSMutableArray arrayWithArray:codeList];
    for (NSString *code in codeList) {
        if (![self.codeMapping.allKeys containsObject:code]) {
            [list removeObject:code];
        }
    }
    return list;
}

你确定在断点上停止后它没有在for循环上运行吗?不仅仅是错误的做法,而且是非法的做法,如果操作系统发现它就会受到崩溃的惩罚。谢谢你们的帮助,这是我的错误。顺便说一句,在今天之前,代码几乎运行了一个月,我不知道为什么它今天才失败,如何处理它?你只需要复制你的数组。对第一个对象进行迭代,并从第二个对象中删除对象。通过这种方式,您将确保对所有元素都进行了迭代。然后只保留第二个数组供您使用。在for循环条件下,将
list
替换为
codeList
。是的,我已将其修复为@bmindhacker的代码,与您所说的相同。顺便说一句,也谢谢你的善意帮助。@Azevedo谢谢你的帮助,但是这个块看起来对我不好,它已经阻止了我的应用程序很长时间了…谢谢,我已经将它修复为@bmindhacker的代码,它工作得很好。