我有一段代码将对象字典构造为键,将操作代码(如添加/更新/删除)构造为值。
最近,无论是 iOS 6,还是“zee Germans”的到来,它都崩溃了。值是被构造的,偶尔会被添加,但大多数时候我会得到一个充满(空)值的字典。
for (int i = 0; i < newArray.count; i++)
{
if (![oldArray containsObject:[newArray objectAtIndex:i]])
{
NSNumber *opNumber = [NSNumber numberWithInt:(int)kInsertOperation];
[_operationsForRows setObject:opNumber forKey:[newArray objectAtIndex:i]];
}
else ...
}
我已经用中间变量和将枚举值显式转换为 int 来修饰代码,并且变得更加困惑。打印出结果字典给出:
{
"<Order: 0x8aad980>" = (null);
"<Order: 0x8aad7a0>" = (null);
}
谁能解释一下,我在这里错过了什么?字典甚至不应该能够保存空值,不是吗?
此代码在 ARC 下。
NSMutableDictionary 在主线程上初始化,但仅在单个辅助线程上使用。
有时,会正确添加一两个对象。说,10%。从那以后我尝试过的:
- 我已将字典初始化移至与用法相同的线程。哇,90-95% 的对象都被正确添加了,但这里和那里仍然是 null。
- 我已经在类字段中保存了所有可能的 NSNumber。在主线程上创建字典和数字,0% 的成功率,比我开始的要低。
- 在类字段中使用当前线程初始化的字典和主线程编号,我再次达到 90-95%...
哭吧,哭吧……看起来像是对整个地方的重写。