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

iOS 码拜 7年前 (2015-05-07) 366次浏览 0个评论
 

 
       


      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]; 会有一个警告
引用 4 楼 waynell 的回复:

建议在int num=[ArrLat count];之前输出一下ArrLat的retainCount看看是不是计数为0。
而且在调用之前在if判断的时候是没有问题的:
if ([ArrLat count]>0
&&[ArrLng count]>0&&[ArrAddress count]>0&&[ArrName count]>0) 
{
 ……

进入之前跟之后对象的内容都是一样的

20分
貌似是这样的:
NSArray *ArrLat=[[NSArray alloc] initWithObjects [dic objectForKey:@”lat”],nil] ??
这么改试试:
NSMutableArray *ArrLat=  [[NSMutableArray alloc]  initWithCapacity:20];
[ArrLat addObject:@”lat”];

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


CodeBye 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权 , 转载请注明为什么在这里会出现“EXC_BAD_ACCESS”. 上面并没有release ArrLat 啊。。求解
喜欢 (0)
[1034331897@qq.com]
分享 (0)

文章评论已关闭!