不明白崩溃日志?
问题描述:
我想了解崩溃日志。当我尝试执行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....)
。我附上了崩溃日志的截图。
什么可能导致此,如何解决呢?
答
我认为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参数或对象。
是的我记录了location1 && location2非零如果方法,它不显示...我摆脱了!错误,只是作出了错误需要 – MCKapur 2012-04-13 11:04:15
现在没有崩溃顺便说一句..... – MCKapur 2012-04-13 11:06:59
但文本没有设置 也我修正了: – MCKapur 2012-04-13 11:07:15