0

我有一个从 api 调用填充的 NSMutable 数组,其中包含 31 个有效值。

在此处输入图像描述

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

在主队列中,我正在遍历 chart_data 但我 EXC_BAD_ACCESS 代码 = 1,当我尝试更深入地调试此事时。我发现我的 NSmutable 数组正在损坏。

这是我访问数组时的屏幕截图。

在此处输入图像描述

随机地址或值被分配给它,然后破坏我的代码,因为我期望双精度值和日期值。

在这 2 个事务之间没有对 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

PS:这是一个零星的问题,10 次出现 8 次。有时当我运行应用程序时,它会完美运行并向我展示我想要的。注意:只是一个注释。我昨天将我的 Xcode 更新到了 5.1 beta 4 版本。但我似乎不认为这会导致问题,因为我尝试在旧版本的 Xcode 中运行相同的代码,我可以重现该错误。

4

2 回答 2

3

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

我猜这些值没有被保留。

于 2014-01-23T05:36:57.577 回答
0

使用 NSArray * 并复制。

NSArray *chart_data = [[HttpMethods GetChartDataPost:1] copy];
于 2014-01-22T15:32:55.083 回答