-1

因此,首先堆栈溢出的问题,但很长一段时间的读者;)我的LocationManager设置变回默认,当它到达didUpdateLocations

我的LocationManager设置变回默认,当它到达didUpdateLocations。我已经在viewDidLoad中设置了一个观察者,以及像这样的一些默认值。我还要先分配,初始化,然后设置locationManager的委托。

[[NSNotificationCenter defaultCenter] addObserver:self 
             selector:@selector(settingsDidChange:) 
              name:NSUserDefaultsDidChangeNotification 
              object:nil]; 

NSMutableDictionary *defaultsDictionary = [[NSMutableDictionary alloc] init]; 

[defaultsDictionary setObject:@(kCLLocationAccuracyNearestTenMeters) forKey:[SettingKeys LocationTrackingAccuracyPrefs]]; 
[[NSUserDefaults standardUserDefaults] registerDefaults:defaultsDictionary]; 

这里是正在观察settingsDidChange我所在的地方尝试设置的LocationManager的desiredAccuracy。

- (void)settingsDidChange:(NSNotification *)notification 
{ 
NSUserDefaults *settings = [NSUserDefaults standardUserDefaults]; 
CLLocationAccuracy desiredAccuracy = [settings doubleForKey:[SettingKeys LocationTrackingAccuracyPrefs]]; 
locationManager.desiredAccuracy = desiredAccuracy; 
} 

在一个单独的设置查看我改变desiredAccuracy的,这似乎是结转直至到达didUpdateLocations值。然后,无论我如何设置它似乎恢复(或从不改变)为“最佳”作为所需的准确性。我不知道我在这里错过了什么......我希望你们都能引导我走向正确的方向。谢谢!

+0

尝试[[NSUserDefaults standardUserDefaults] synchronize];在registerDefaults –

+1

之后您在settingsDidChange中设置了断点以确保它被调用?你有没有检查你所获得的期望的准确性的价值?你确定那个代码运行时locationManager不是零吗? (我敢打赌,locationManager是零,所以你的settingsDidChange方法实际上并没有改变任何东西。) –

+0

@FranePoljak我尝试了同步 - 它似乎没有任何改变。 – rclee

回答

1

想通了我的问题...在我的settingsDidChange进一步下来我重新分配我的LocationManager,并导致它恢复到默认设置。我以前没有看到它,我感到很蠢!无论如何感谢您的帮助!

locationManager = [[CLLocationManager alloc] init]; 

ARRRGGG!

+0

我刚刚发布的信息是,你自己解决这个问题是因为你没有提供足够的信息,并且可能有一些细节你错了。创建位置管理器的新实例将成为我的猜想之一。请在您提出问题时提供有关您设置的清晰和详细的信息。为了试图帮助你,必须播放20个问题是非常令人沮丧的。 –

+0

@DuncanC我试图提供我当时认为相关的所有信息。它已经迟到了,我只是忽略了那部分代码。我的歉意,我会尽力在未来更详细。谢谢。 – rclee

+0

重要的事情是(a)你发现你的问题和(b)你回到这个线程的答案,所以其他人可以学习(投票)。你应该接受你的答案。 –