Objective c iOS7核心位置未更新

Objective c iOS7核心位置未更新,objective-c,ios7,core-location,cllocationmanager,Objective C,Ios7,Core Location,Cllocationmanager,我有一个非常简单的应用程序示例,用于初始化和更新用户位置。。在设备上,它每隔一秒左右就会成功抛出另一个回调位置,但在设备上(运行iOS7的iPhone)会调用该方法一次,然后神秘地停止 //Setup Location Manager in ViewDidLoad locationManager = [[CLLocationManager alloc] init]; [locationManager setDistanceFilter:kCLDistanceFilterNone]; [locat

我有一个非常简单的应用程序示例,用于初始化和更新用户位置。。在设备上,它每隔一秒左右就会成功抛出另一个回调位置,但在设备上(运行iOS7的iPhone)会调用该方法一次,然后神秘地停止

//Setup Location Manager in ViewDidLoad
locationManager = [[CLLocationManager alloc] init];
[locationManager setDistanceFilter:kCLDistanceFilterNone];
[locationManager setDesiredAccuracy:kCLLocationAccuracyBest];
[locationManager setDelegate:self];
[locationManager startUpdatingLocation];

-(void)locationManager:(CLLocationManager *)manager didFailWithError:(NSError *)error
{
     NSLog(@"location services not turned on");
}

-(void)locationManager:(CLLocationManager *)manager didUpdateLocations:(NSArray *)locations
{
     NSLog(@"loactions %@", locations);
}

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

    NSLog(@"new location %f, and old %f", newLocation.coordinate.latitude, newLocation.coordinate.longitude);
}

在iOS6中,此应用程序运行良好,并不断更新设备位置。。。自iOS7以来发生了什么变化?

这里有几点:

1-我在任何地方都看不到属性:pausesLocationUpdatesAutomatically。此属性的默认值为“是”。这意味着,根据您的activityType(请参见下面的#2),GPS将暂停更新,这可能是您无法获得更新的原因。该算法是一个只有苹果知道的黑匣子,也许它在iOS6和iOS7之间发生了某种变化。将PausesLocationUpdates自动设置为NO会影响电池

2-您应该根据应用程序设置activityType。默认值为CLActivityTypeOther,我不确定它对GPS算法和上面的#1有何影响。因此,为了最初测试您的应用程序,我会适当地设置activityType,并将PausesLocationUpdates自动更改为No。在我的测试中,我会持续地每隔一秒获得一次更新(我测试了一夜)

3-位置更新测试需要移动。为了获得更好的结果,我将使用您设置的activityType进行测试。换句话说,如果activityType是ClaActivityTypeFitness,我会四处走动测试它,等等

4-locationManager didUpdateToLocation fromLocation在iOS7中不推荐使用。此外,如果实现了locationManager didUpdateLocations,则不会调用前者。因此,在上述情况下,不会调用locationManager didUpdateToLocation fromLocation

5-KCLLOCATIONACURACYBEST for Navigation和KCLLOCATIONACURACYBEST之间没有实际的电池使用差异。另一方面,kCLLocationAccuracyBestForNavigation使用高速GPS,并将其与加速计数据相结合

因此,我将从设置activityType开始,将pausesLocationUpdatesAutomatically设置为NO,并将desiredAccuracy更改为kCLLocationAccuracyBestForNavigation。一旦你得到持续更新,我会自动将PausesLocationUpdates设置为Yes,并尝试使用代码来实现相同的应用可用性


希望这有帮助

didUpdateLocations方法是否正在触发?它的触发但只有一次…您是否在此方法中调用StopUpdateLocation?是,我似乎通过将DesiredAccuracy更改为BestForNavigation解决了这个问题……可能这不是解决方案,但委托方法locationManager:didUpdateToLocation:fromLocation:自ios6以来已被弃用,如果您不部署在低于ios6的设备上,则不需要它。如果我将我的应用程序放在后台,走到A点,然后停止移动20分钟。然后我再次开始移动到B点。在这段时间里,应用程序仍然在后台。当我以前台模式打开我的应用程序时,didUpdateLocations会给我点A和点B之间的所有位置吗?不会,GPS芯片接收到的位置将通过locationManager:didUpdateLocations方法直接传递。因此,如果要存储位置路径,则必须在接收位置时直接存储它们。