这是一个奇怪的,你们。
- (void)locationManager:(CLLocationManager *)manager didUpdateToLocation:(CLLocation *)newLocation fromLocation:(CLLocation *)oldLocation
{
CLLocationCoordinate2D coordinate = newLocation.coordinate;
self.mark.longitude = [NSNumber numberWithDouble:coordinate.longitude];
self.mark.latitude = [NSNumber numberWithDouble:coordinate.latitude];
NSLog(@"Got %f %f, set %f %f", coordinate.latitude, coordinate.longitude, self.mark.latitude, self.mark.longitude);
[manager stopUpdatingLocation];
manager.delegate = nil;
if (self.waitingForLocation) {
[self completeUpload];
}
}
该“mark”对象中的latitude
和longitude
是引用NSNumber iVars的合成参数。
在模拟器中,中间那行的NSLog输出显示为:
2010-05-28 15:08:46.938 EverWondr[8375:207] Got 37.331689 -122.030731, set 0.000000 -44213283338325225829852024986561881455984640.000000
这是一个比1无限循环更东的东西!设备上的数字不同,但相似 - lat仍然为零,而long是一个非常不可能的高负数。
在控制器的其他地方,我接受按下按钮并上传文件(我刚用相机拍摄的图像),并附上地理编码信息,我需要self.waitingForLocation
通知CLLocationManager代表我已经按下了那个按钮,一旦它完成了它的交易,它应该继续并启动上传。事情是,按下按钮点击接收方法,我测试看看CL是否通过测试self.mark.latitude
完成,这似乎是设置为零......
答案 0 :(得分:2)
您正在将NSNumber
对象的指针打印为float
s - 这可能看起来很不一样。
使用:
NSLog(@"Got %f %f, set %@ %@", coordinate.latitude, coordinate.longitude,
self.mark.latitude, self.mark.longitude);
......或:
NSLog(@"Got %f %f, set %f %f", coordinate.latitude, coordinate.longitude,
[self.mark.latitude doubleValue], [self.mark.longitude doubleValue]);