当closures视图启动位置服务通知错误发生
我创build了一个使用这个项目的小应用程序,因为它的核心是:
https://github.com/dsdavids/TTLocationHandler
它一直工作得很好,直到我已经移动从应用程序中的另一个视图移动位置服务。
什么应用程序正在做:当它启动时,您可以点击开始button和( 在模拟器位置必须启用 )在移动的地图上的移动路线显示。
当我在第二个视图中移动开始行动时,问题出现了。
在第二个视图中,我只想启动位置服务并closures它。
问题是,当我开始定位在第二个视图我得到错误(应用程序崩溃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]; }); ...
我认为这是因为我closures了第二个视图(查看启动服务), TTLocationHandler
仍然试图发送一些东西。
为了更好地理解我的问题,我已经在git hub上添加了项目:
https://github.com/1110/common-location-features
您可以下载它,并从第二个视图运行启动服务,当closures该视图的应用程序将在几秒钟内崩溃。
如果有人能find一点时间告诉我我在做什么错,我会非常感激,因为我确信这是一件小事,我可能做错了。
整个代码在SecondViewController.m
谢谢
问题可能是位置pipe理器将位置更新发送到不再存在的对象。
我没有时间挖掘所有的代码,但是一般来说,一旦您告诉位置pipe理器startUpdatingLocation
位置,您需要保留位置pipe理器委托对象,直到您告诉它停止。 如果你所说的“第二个视图”是你的委托对象,那么你不能让这个视图被释放,直到你告诉位置pipe理器stopUpdatingLocation
。
一般而言,您希望将一个对象设置为CLLocationManagerDelegate
,并在需要的时候保持该对象的状态。 每当位置发生变化时,代表都会收到通知,代表有责任更新任何关注位置的视图。