代码之家  ›  专栏  ›  技术社区  ›  Dan Ray

将corelocation结果设置为nsnumber对象参数

  •  0
  • Dan Ray  · 技术社区  · 14 年前

    你们都很奇怪。

    - (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];
        }
    }
    

    这个 latitude longitude 其中“mark”对象是指参考nsnumber ivars的合成参数。

    在模拟器中,中间那行的nslog输出显示:

    2010-05-28 15:08:46.938 EverWondr[8375:207] Got 37.331689 -122.030731, set 0.000000 -44213283338325225829852024986561881455984640.000000
    

    这比一个无限循环要远得多!设备上的数字不同,但类似——lat仍然为零,long不太可能是高负数。

    在控制器的其他地方,我接受一个按钮按下并上传一个文件(我刚用相机拍摄的图像)及其相关的地理编码信息,我需要它。 self.waitingForLocation 要通知cllocationmanager代表我已经点击了那个按钮,一旦它完成交易,它应该继续并启动上传。问题是,在按钮上点击接收方法,我测试看cl是否通过测试完成。 self.mark.latitude ,好像是调零了…

    1 回复  |  直到 14 年前
        1
  •  2
  •   Georg Fritzsche    14 年前

    您正在打印指向 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]);