将randomocation结果设置为NSNumber对象参数

时间:2010-05-28 19:29:52

标签: iphone objective-c

这是一个奇怪的,你们。

- (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”对象中的latitudelongitude是引用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完成,这似乎是设置为零......

1 个答案:

答案 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]);