1

我有一个 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 之前,我尝试保留指针和分配,但似乎没有任何效果。

我错过了什么:D

4

2 回答 2

4

我不太确定你的代码,但我可以建议这个

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

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

currentLocation = [newLocation retain];

或者

self.currentLocation = newLocation;

因为您的分配currentLocation = newLocation;不保留指针并且 newLocation 是自动释放的。

于 2011-05-27T02:26:11.183 回答
1

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

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

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

于 2011-05-27T02:12:42.370 回答