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 啊。。求解 } |
|
有可能是你这ArrLat 玩意NULL了
|
|
-(void)DoAddAnnotation:(NSArray *)ArrLat longitude:(NSArray *)ArrLng address:(NSArray *)ArrAddress title:(NSArray *)ArrName
{ NSLog(@”lat:%@”,ArrLat); NSLog(@”lng:%@”,ArrLng); NSLog(@”address:%@”,ArrAddress); NSLog(@”naem:%@”,ArrName); 这里打印出来还有值,不是null的 int num=[ArrLat count]; //为什么在这里会出现“EXC_BAD_ACCESS”. 上面并没有release ArrLat 啊。。求解 } |
|
5分 |
[dic objectForKey:@”lat”]返回的是什么?如果是数组,不要用initWithObjects,用initWithArray试试。
|
10分 |
建议在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 ]; } 理论上讲你的代码是不应该有问题的。 建议把所有代码贴出来看一下,或者自己在调试的时候看一下在进入方法之前和之后变量的对象是否相同。 |
5分 |
ArrLat 啊,参数最好改其它的名字。不然 int num=[ArrLat count]; 会有一个警告
|
进入之前跟之后对象的内容都是一样的 |
|
20分 |
貌似是这样的:
NSArray *ArrLat=[[NSArray alloc] initWithObjects [dic objectForKey:@”lat”],nil] ?? 这么改试试: NSMutableArray *ArrLat= [[NSMutableArray alloc] initWithCapacity:20]; [ArrLat addObject:@”lat”]; 我怀疑 dic 这个对象被强制释放了?? |