应用程序崩溃使用setValue:forKey

时间:2015-03-06 13:42:50

标签: objective-c nsmutabledictionary

我有一个可变数组“myArray”,如:

{
    IdPregunta = 1;
    Respuestas =     (
                {
            IdResp = 1;
            Valor = 1;
        },
                {
            IdResp = 2;
            Valor = 0;
        }
    );
},

作为表格视图的来源。

当用户点击按钮进入单元格时,我需要更改布尔值, 我没有运气使用setValue:forKey方法:

NSMutableDictionary * dict = [[NSMutableDictionary alloc]init];
dict = [[[ myArray valueForKey:@"Respuestas"]objectAtIndex:0]objectAtIndex:1];
        [dict setValue:[NSNumber numberWithBool:true] forKey:@"Valor"];

App没有任何“可读”消息崩溃(线程1:breackpoint 1,3 3,3 5,3 ....)。

我尝试用

进行更改
[dict setValue:[NSNumber numberWithBool:true] forKey:@"Valor"];

同样的结果。

1 个答案:

答案 0 :(得分:1)

首先,无法保证dict在运行时确实是NSMutableDictionary。您在

中分配的初始参考
NSMutableDictionary* dict = [[NSMutableDictionary alloc] init];

会立即在下面的行中被覆盖:

dict = [[[myArray valueForKey: @"Respuestas"] objectAtIndex: 0] objectAtIndex: 1];

现在,dict的价值是另一回事。如果你很幸运,dict是此行之后NSMutableDictionary的一个实例,但我不会赌它...这会产生效果

[dict setValue: [NSNumber numberWithBool:true] forKey: @"Valor"];

不可预测的。通过dict

检查第二次分配后NSLog的值
NSLog(@"Value of dict is now %@", dict);

另一点是,

的结果
[[[myArray valueForKey: @"Respuestas"] objectAtIndex: 0] objectAtIndex: 1]
如果我正确地读了你的示例数据结构,那么

似乎是未定义的:

[myArray valueForKey: @"Respuestas"]

产生一个数组

(
    {
        IdResp = 1;
        Valor = 1;
    },
    {
        IdResp = 2;
        Valor = 0;
    }
);

周围的

[... objectAtIndex: 0]

产生字典

{
    IdResp = 1;
    Valor = 1;
}

和最外面的电话

[... objectAtIndex: 1]

对我来说似乎没有定义(因为我们得到了一个字典,而不是一个数组)。你的最后一个示例行

[valor setValue:[NSNumber numberWithBool:true] forKey:@"Valor"];

我无法解释。什么是valor