我有一个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
答案 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];
。在功能上它们是相同的,这是一种风格问题。