读书人

为什么在这里会出现“EXC_BAD_ACCESS”

发布时间: 2012-03-15 11:50:39 作者: rapoo

为什么在这里会出现“EXC_BAD_ACCESS”. 上面并没有release ArrLat 啊。。求解

C/C++ code
      NSArray *ArrLat=[[NSArray alloc] initWithObjects:[dic objectForKey:@"lat"],nil] ;        NSArray *ArrLng=[[NSArray alloc] initWithObjects:[dic objectForKey:@"lng"],nil] ;        NSArray *ArrAddress=[[NSArray alloc] initWithObjects:[dic objectForKey:@"address"],nil] ;        NSArray *ArrName=[[NSArray alloc] initWithObjects:[dic objectForKey:@"name"],nil] ;                 if ([ArrLat count]>0&&[ArrLng count]>0&&[ArrAddress count]>0&&[ArrName count]>0)         {            [self DoAddAnnotation:ArrLat longitude:ArrLng address:ArrAddress title:ArrName ];        }  -(void)DoAddAnnotation:(NSArray *)ArrLat longitude:(NSArray *)ArrLng address:(NSArray *)ArrAddress title:(NSArray *)ArrName{     int num=[ArrLat count];  //为什么在这里会出现“EXC_BAD_ACCESS”. 上面并没有release ArrLat  啊。。求解  } 


[解决办法]
[dic objectForKey:@"lat"]返回的是什么?如果是数组,不要用initWithObjects,用initWithArray试试。
[解决办法]
建议在int num=[ArrLat count];之前输出一下ArrLat的retainCount看看是不是计数为0。
而且在调用之前在if判断的时候是没有问题的:
if ([ArrLat count]>0
&&[ArrLng count]>0&&[ArrAddress count]>0&&[ArrName count]>0)
{
[self DoAddAnnotation:ArrLat longitude:ArrLng address:ArrAddress title:ArrName ];
}
理论上讲你的代码是不应该有问题的。
建议把所有代码贴出来看一下,或者自己在调试的时候看一下在进入方法之前和之后变量的对象是否相同。
[解决办法]
ArrLat 啊,参数最好改其它的名字。不然 int num=[ArrLat count]; 会有一个警告
[解决办法]
貌似是这样的:
NSArray *ArrLat=[[NSArray alloc] initWithObjects [dic objectForKey:@"lat"],nil] ??
这么改试试:
NSMutableArray *ArrLat= [[NSMutableArray alloc] initWithCapacity:20];
[ArrLat addObject:@"lat"];

我怀疑 dic 这个对象被强制释放了??

读书人网 >Iphone

热点推荐