不明白崩溃日志?

问题描述:

我想了解崩溃日志。当我尝试执行CLLocationDistance方法distanceFromLocation时,会发生这种情况。为了获得两个位置,我需要进行地理编码,但我需要一个块,以便可以拥有这两个实例变量。所以我把它带参数直接的方法:不明白崩溃日志?

- (void)geoCodeSetup:(NSArray *)placemarks :(NSError *)error andIdentifier:(NSString *)string { 
CLLocation *location1; 
CLLocation *location2; 
if ([string isEqualToString:@"Origin"]) { 
    if (!error) { 
     CLPlacemark *place = [placemarks objectAtIndex:0]; 
     CLLocation *location = place.location; 
     location1 = [[CLLocation alloc] initWithLatitude:location.coordinate.latitude longitude:location.coordinate.longitude]; 

    } else { 
     NSString *string = [NSString stringWithFormat:@"%@ - also make sure you have inputted a valid city", [error localizedDescription]]; 
     UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Error" message:string delegate:self cancelButtonTitle:@"Ok" otherButtonTitles:nil, nil]; 
     [alert show]; 
    } 
} 

if ([string isEqualToString:@"Destination"]) { 
    if (!error) { 
     CLPlacemark *place = [placemarks objectAtIndex:0]; 
     CLLocation *location = place.location; 
     location2 = [[CLLocation alloc] initWithLatitude:location.coordinate.latitude longitude:location.coordinate.longitude]; 


    } else { 
     NSString *string = [NSString stringWithFormat:@"%@ - also make sure you have inputted a valid city", [error localizedDescription]]; 
     UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Error" message:string delegate:self cancelButtonTitle:@"Ok" otherButtonTitles:nil, nil]; 
     [alert show]; 
    } 
} 


CLLocationDistance distanceM = [location1 distanceFromLocation:location2];  
[metreDistance setText:[NSString stringWithFormat:@"%f", distanceM]]; 

} 

- (IBAction)calculateDistance { 

[textFieldDestination resignFirstResponder]; 
NSString *origin = [textFieldOrigin text]; 
if (origin) { 
    CLGeocoder *geoCode = [[CLGeocoder alloc] init]; 

    [geoCode geocodeAddressString:origin completionHandler: ^(NSArray *placemarks, NSError *error) { 
     NSArray *p1 = placemarks; 
     NSError *e1 = error; 
     [p1 retain]; 
     [e1 retain]; 
     [self geoCodeSetup:p1 :e1 andIdentifier:@"Origin"]; 


    }]; 
} 

NSString *destination = [textFieldDestination text]; 
if (destination) { 

    CLGeocoder *geoCode2 = [[CLGeocoder alloc] init]; 

    [geoCode2 geocodeAddressString:destination completionHandler:^(NSArray *placemarks, NSError *error) { 
     NSArray *p2 = placemarks; 
     NSError *e2 = error; 
     [p2 retain]; 
     [e2 retain]; 
     [self geoCodeSetup:p2 :e2 andIdentifier:@"Destination"]; 




    }]; 
} 

它崩溃/上distanceFromLocation部分给出EXC_BAD_ACCESS (code =EXC_ARM_DA_ALIGN, address=.....etc....)。我附上了崩溃日志的截图。

Crash Log

什么可能导致此,如何解决呢?

我认为LOCATION1或LOCATION2没有设置,因为你做到了包装成

if ([string isEqualToString:@"Origin"]) { 
    if (!error) { 

你可以通过链接线2和3,以避免碰撞:

CLLocation *location1 = nil; 
CLLocation *location2 = nil; 

,也许你需要还要改变路线:

CLLocationDistance distanceM = [location1 distanceFromLocation:location2]; 
// change to 
CLLocationDistance distanceM; 
if(location1 && location2) { 
    distanceM = [location1 distanceFromLocation:location2]; 
} 

,我认为你有至少一个NUL运行distanceFromLocation: L参数或对象。

+0

是的我记录了location1 && location2非零如果方法,它不显示...我摆脱了!错误,只是作出了错误需要 – MCKapur 2012-04-13 11:04:15

+0

现在没有崩溃顺便说一句..... – MCKapur 2012-04-13 11:06:59

+0

但文本没有设置 也我修正了: – MCKapur 2012-04-13 11:07:15