继续获取EXC_BAD_ACCESS。 Ran NSZombieEnabled并没有提出任何建议。
在模拟器控制台中:
2010-09-11 23:39:56.876 [19072:207] 1.309789, lat, 103.772196, lon
在设备控制台中:
EXC_BAD_ACCESS
代码行:
NSLog(@"%f, lat, %f, lon",latitudeString,longitudeString);
CLManager在做什么:
- (void)locationManager:(CLLocationManager *)manager didUpdateToLocation:(CLLocation *)newLocation fromLocation:(CLLocation *)oldLocation
{
NSLog(@"Entering mlocationmanager did updatetolocation");
latitudeString = [NSString stringWithFormat:@"%f", newLocation.coordinate.latitude];
longitudeString = [NSString stringWithFormat:@"%f", newLocation.coordinate.longitude];
NSLog(@"lat %@ long %@", latitudeString, longitudeString);
NSLog(@"%@",newLocation.description);
if (latitudeString.length >0 && longitudeString.length > 0){
NSLog(@"Yes both are more than 0");
locationIsReady = YES;
}
[self.tableView reloadData];
}
这里发生了什么?这两个变量都在我的头文件中,并且符合CLLocationManagerDelegate。已经工作了几个小时,但没有运气。希望你们能帮忙。
NSString *latitudeString;
NSString *longitudeString;
答案 0 :(得分:2)
您确实无需将newLocation.coordinate.longitude
转换为NSString
即可将其打印出来。只需在格式字符串中使用%f
即可打印它们。
另外,当你写:
if (latitudeString.length >0 && longitudeString.length > 0)
您正在比较字符串的长度,始终大于零。因为经度或纬度为零,转换后的字符串将为@"0.0"
,其长度为3
。我怀疑你真正想要的是:
if (newLocation.coordinate.latitude != 0.0
&& newLocation.coordinate.longitude != 0.0)
答案 1 :(得分:1)
代码行确实应该是你的罪魁祸首:
NSLog(@"%f, lat, %f, lon",latitudeString,longitudeString);
Objective-C对象的正确NSLog
格式参数为%@
。 %f
用于浮点数。
答案 2 :(得分:1)
最后在很长一段时间后修复它。
花了一些时间才意识到NSXMLParser实际上覆盖了我的一些变量(我不知道为什么)。所以最后,我在解析XML后调用了CLLocationManager。问题解决了。