我正在使用coreLocation制作我的应用。下面是我的类,它将位置更新发送到委托类,该类接收位置坐标并使用它们。
问题是,当我第一次启动我的应用程序时,我进入主视图(使用位置坐标的类是uiTableView,第二个是在主视图旁边),它不调用didUpdateToLocation,因为视图尚未加载
然后当它的视图加载时,它会被调用两次,它应该被调用一次。然后再次当我处理我的应用程序n进入主视图并按下iPhone的中央按钮,应用程序转到后台然后再次当我在主视图上启动它locationDidUpload方法被调用4次虽然视图尚未加载其中它是实现。我不想要这个,因为它让系统忙碌。请建议。
- (id)init {
self = [super init];
if(self != nil) {
self.locMgr = [[[CLLocationManager alloc] init] autorelease]; // Create new instance of locMgr
self.locMgr.delegate = self; // Set the delegate as self.
self.locMgr.desiredAccuracy=kCLLocationAccuracyThreeKilometers;//check
self.locMgr.distanceFilter=500;//check in meters
[self.locMgr startUpdatingLocation];
}
return self;
}
- (void)locationManager:(CLLocationManager *)manager didUpdateToLocation:(CLLocation *)newLocation fromLocation:(CLLocation *)oldLocation {
if([self.delegate conformsToProtocol:@protocol(CoreLocationControllerDelegate)]) { // Check if the class assigning itself as the delegate conforms to our protocol. If not, the message will go nowhere. Not good.
NSLog(@"core");
[self.delegate locationUpdate:newLocation];
}
}
- (void)locationManager:(CLLocationManager *)manager didFailWithError:(NSError *)error {
if([self.delegate conformsToProtocol:@protocol(CoreLocationControllerDelegate)]) { // Check if the class assigning itself as the delegate conforms to our protocol. If not, the message will go nowhere. Not good.
if (error.code==kCLErrorDenied) {
UIAlertView *alert=[[UIAlertView alloc] initWithTitle:@"Permission Denied" message:@"Please allow location to retrieve location" delegate:self cancelButtonTitle:@"Ok" otherButtonTitles:nil , nil];
[alert show];
[alert release];
[locMgr stopUpdatingLocation];
[locMgr release];
locMgr=nil;
}
[self.delegate locationError:error];
}
}
- (void)dealloc {
[self.locMgr release];
[super dealloc];
}
@end
答案 0 :(得分:2)
这是正常的,如果每次都获得不同的精度,则会被调用两次。
检查每个呼叫的horizontalAccuracy
newLocation
属性,第二个可能比第一个近似发送的第一个更准确(即使您使用kCLLocationAccuracyThreeKilometers
以获得所需的准确度)
这与在GoogleMaps地图上显示您的位置的“地图”应用程序完全相同:您首先要有一个非常接近位置的大蓝圈,然后快速获得更准确的位置。
答案 1 :(得分:0)
您可以尝试将邮件startMonitoringSignificantLocationChanges
发送到CLLocationManager
而不是startUpdatingLocation
吗?