我有一个NSMutable数组,该数组是从api调用填充的,并且其中有31个有效值。



如我们所见,它具有一个类对象的集合,其中包含4个属性。它们每个都分配有有效值。例如:dat,ancillary等。这在dispatch_aync中。

在主队列中,当我尝试更深入地调试问题时,我遍历了chart_data但我的EXC_BAD_ACCESS代码= 1。我发现我的NSmutable阵列损坏了。

这是我访问阵列时的屏幕截图。



分配给它的随机地址或值将破坏我的代码,因为我希望使用双精度和日期值。

在这两个事务之间,对chart_data没有任何操作。知道为什么会这样。直到今天,这种情况突然发生了,在这段时间内代码运行得非常好。

填充Nsmutable数组的代码

+(NSMutableArray*)GetData:(NSDictionary*)dataArray
{
    daily_unit_Array = [[NSMutableArray alloc]init];

    for (int i=0; i < 31; i++)
    {
        UnitCost *unit_cost = [[UnitCost alloc]init];

        unit_cost.date = [keys objectAtIndex:i];

        NSArray *unit_cost_value = [dataArray objectForKey:[keys objectAtIndex:i]];

        unit_cost.val1 = [unit_cost_value valueForKey:@"val1"];
        unit_cost.val2 = [unit_cost_value valueForKey:@"val2"];
        unit_cost.val3 = [unit_cost_value valueForKey:@"val3"];
        unit_cost.val4 = [unit_cost_value valueForKey:@"val4"];

        [daily_unit_Array addObject:unit_cost];
    }
    return daily_unit_Array;
}


并将其返回给调用它的函数并将其分配给chart_data

附言:这是一个零星的问题,每10次发生8次。有时,当我运行该应用程序时,它会完美运行并显示我想要的内容。
注意:请注意。我昨天将Xcode更新为5.1 beta 4版本。但是我看来这可能不会引起问题,因为我尝试在旧版本的Xcode中运行相同的代码,并且可能重现该错误。

最佳答案

我终于找到了解决方案。
正如@trojafoe指出的那样,问题不在NSmutable Array中,而在其中的对象中。
我发现UnitCost对象的属性为(assign,nonatomic)类型。我将它们更改为(retain,nonatomic)后,问题就解决了...

我猜这些值没有保留。

关于ios - NsmutableArray在访问它时被损坏,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/21284864/

10-13 01:56