0

我有一段代码将对象字典构造为键,将操作代码(如添加/更新/删除)构造为值。

最近,无论是 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%...

哭吧,哭吧……看起来像是对整个地方的重写。

4

1 回答 1

0

尝试使用NSMutableDictionary而不是 NSDictionary。

两者之间的区别在于您可以NSMutableDictionary在初始化后修改而NSDictionary设置。

于 2012-10-16T08:45:11.307 回答