访问CLLocation时应用程序崩溃

时间:2011-05-27 01:27:10

标签: iphone cllocation

我有一个CLLocation,我将其设置为以下函数中的当前位置

- (void)locationManager:(CLLocationManager *)manager
didUpdateToLocation:(CLLocation *)newLocation
       fromLocation:(CLLocation *)oldLocation{

currentLocation = newLocation;
}

当我尝试在以后的方法中访问当前位置时,应用程序崩溃。

NSLog(@"current latitude is %f", currentLocation.coordinate.latitude);
NSString *longitude = [NSString stringWithFormat:@"%g", currentLocation.coordinate.longitude];
NSString *latitude =  [NSString stringWithFormat:@"%g", currentLocation.coordinate.latitude];

当前位置在第一种方法中设置。我可以打印出来,奇怪的是我将此currentLocation定义为标题中的指针。

应用程序崩溃,没有堆栈跟踪。调试器只是将我发送到我的应用程序的retValue。

在将其设置为newLocation之前,我尝试保留指针和alloc,但似乎没有任何效果。

我缺少什么:D

2 个答案:

答案 0 :(得分:4)

我对您的代码不太确定,但我可以建议

  

在将其设置为newLocation之前,我尝试保留指针和alloc,但似乎没有任何效果。

在设置之前,您需要保留newLocation指针而不是currentLocation。

currentLocation = [newLocation retain];

self.currentLocation = newLocation;

因为你的作业currentLocation = newLocation;没有保留指针而newLocation是自动释放。

答案 1 :(得分:1)

  

应用程序崩溃但没有   堆栈跟踪。调试器只是发送给我   到我的应用程序的retValue。

您使用的是Xcode 4吗?很多人都遇到了新界面的问题。在堆栈跟踪窗口的底部有一个滑块,如果它设置为“粗略”,它将只显示应用程序的main()块。

如上面的评论所示,我认为你应该说self.currentLocation而不是currentLocation。不同的是,当你只说currentLocation时,你只是指定一个指针。要获得您在头文件中定义的所有“神奇”功能(保留等),您需要使用self.currentLocation表示法OR,[self setCurrentLocation:newLocation];。在功能上它们是相同的,这是一种风格问题。