gpt4 book ai didi

ios - 当关闭启动位置服务通知错误的 View 时

转载 作者:行者123 更新时间:2023-11-29 02:55:33 25 4
gpt4 key购买 nike

我创建了一个以这个项目为核心的小应用程序:
https://github.com/dsdavids/TTLocationHandler
在我从应用程序的另一个 View 移动位置服务之前,它工作正常。

应用在做什么:当它启动时,您可以点击“开始”按钮,并且(在模拟器位置必须启用)在您移动时会在 map 上显示移动路线。
当我在第二个 View 中移动开始 Action 时,问题就来了。
在第二个 View 中,我只想启动定位服务并关闭它。
问题是当我开始在第二个 View 上定位时,我在此处遇到错误(应用程序崩溃 EXC_BAD):

TTLocationHandler
...
dispatch_async(dispatch_get_main_queue(), ^{
if (OUTPUT_LOGS) NSLog(@"Sending notification out");
NSNotification *aNotification = [NSNotification notificationWithName:LocationHandlerDidUpdateLocation object:[locationToSave copy]];
[[NSNotificationCenter defaultCenter] postNotification:aNotification];
});
...

我认为这是因为我关闭了第二个 View (启动服务的 View )并且 TTLocationHandler 仍然尝试向它发送一些东西。
为了更好地理解我的问题,我在 git hub 添加了项目:
https://github.com/1110/common-location-features

您可以下载它并从第二个 View 运行启动服务,关闭时该 View 应用程序将在几秒钟内崩溃。

如果有人能抽出一点时间告诉我我在这里做错了什么,我将非常感激,因为我确信我可能做错了一些小事。

整个代码在 SecondViewController.m

谢谢

最佳答案

问题可能是位置管理器正在将位置更新发送到不再存在的对象。

我没有时间深入研究你的所有代码,但一般来说,一旦你告诉位置管理器 startUpdatingLocation,你需要保留你的位置管理器委托(delegate)对象,直到你告诉它停止。如果您称为“第二个 View ”的是您的委托(delegate)对象,那么在您告诉位置管理器 stopUpdatingLocation 之前,您不能让该 View 被释放。

通常,您希望有一个对象是 CLLocationManagerDelegate,并在需要时一直保留该对象。每次位置发生变化时,委托(delegate)人都会收到通知,委托(delegate)人有责任更新任何关心该位置的 View 。

关于ios - 当关闭启动位置服务通知错误的 View 时,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23940557/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com