在尝试在ios 8.4模拟器上运行项目时,我对NSMutableArray有一个非常奇怪的情况。该项目是非弧形的,并且有很多代码,但问题的摘要如下:
monthCount的代码:
NSLog(@"months.count = %i", [months count]);
return [months count];
这就是奇怪的地方:在“填充”方法中,我正在创建字典并将它们添加到“月”数组中。添加新对象后,我执行以下操作:
NSLog(@"count after adding: %i", [months count]);
NSLog(@"monthCount returned: %i", [self monthCount]);
出于某种原因,只有[个月计数]来自“填充”方法。 [self monthCount]始终返回“1”。这里有些陌生人: monthCount方法正确查看月数(即此函数中包含的NSLog输出正确的计数),但在我返回并打印出“populate”方法中的值后,它变为“1”。
我还使用调试器测试“populate”和“monthCount”方法实际上是否正在访问同一个数组。相同的代码也可以在我的ios7设备上运行完美(所以它可能只是一个模拟器,但我现在无法在设备上进行测试)。有没有人知道这里发生了什么?
答案 0 :(得分:1)
对不起,大家好。那是一个深夜愚蠢的错误。我刚检查一下,看看是否可能将monthCount返回的内容输入到它不应该的内容中,并发现该方法的声明如下:
-(BOOL)monthCount;
我认为较旧的编译器设法使用此声明返回整数(虽然我不明白如何)。
答案 1 :(得分:0)
添加异常断点。 将MutableArray更改为普通的NSArray。 运行代码,您将获得错误(异常)索引超出范围。 找到从异常断点发生的代码和瞧。你会发现计数减少的代码!
[编辑]:根据您当前的描述,如果您的mutableArray是一个属性,那么通过添加“atomic”关键字使其成为线程安全。当控件处于该状态时,某些其他线程可能正在访问您的阵列。使其成为原子将确保数组一次被操作一个线程。