我有一个NSMutable数组,它从api调用中填充,并且有31个有效值。
我们可以看到它有一个类对象的集合,其中包含4个属性。它们中的每一个都分配有有效值。例如:dat,辅助等。这是在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
P.S:这是一个零星的问题,每10次发生8次。有时,当我运行应用程序时,它完美地运行并向我显示我想要的内容。 注意:只是一个注释。我昨天将我的Xcode更新为5.1 beta 4版本。但我似乎不会这会导致问题,因为我尝试在较旧版本的Xcode中运行相同的代码,我可以重现错误。答案 0 :(得分:3)
我终于找到了解决方案。
正如@trojafoe指出的那样,问题不在于NSmutable Array,而在于它们内部的对象。
我发现UnitCost对象的属性是(assign,nonatomic)
类型。我一改为(retain,nonatomic)
,问题就解决了......
我猜这些值没有被保留。
答案 1 :(得分:0)
使用NSArray *并复制。
NSArray *chart_data = [[HttpMethods GetChartDataPost:1] copy];