加载 MKMapView 时崩溃
Posted
技术标签:
【中文标题】加载 MKMapView 时崩溃【英文标题】:Crash when loading MKMapView 【发布时间】:2013-12-19 16:45:32 【问题描述】:我在加载 MKMapView
时遇到了奇怪的崩溃。发生的模式是当我在一个视图中打开 ABPeoplePickerNavigationController 时,这又会触发 UINavigationController
委托方法
在保存/不保存后,我转到另一个视图——它工作正常。下一个视图——它工作正常。但是当我使用MKMapView
进入视图时,它崩溃了。
其他视图没有任何问题。只有加载 MKMapView
的视图会崩溃并显示以下日志
*** -[UINavigationBar barStyle]: message sent to deallocated instance
我已经注释了代码中加载地图视图的部分,然后它工作正常。因此,当地图视图加载时,我的导航栏似乎在某处被释放。但我无法理解的是,应用程序中的其他视图没有任何问题,只有 mapview 崩溃的那个。我尝试了不同的测试模式,并确保其他视图都没有任何问题。
应用程序不会在模拟器中崩溃。它仅在设备上崩溃。为什么这个问题只在加载 mapview 的视图中出现,而在其他视图中没有。
我尝试通过分析来分析我的问题。这是我发现的,但没有太大帮助。
【问题讨论】:
UIBarButtonItem *buttonItem = [[UIBarButtonItem alloc]initWithTitle:NSLocalizedString(@"contacts",@"Contacts") style:UIBarButtonItemStyleBordered target:self action:@selector(cancel:)];
这就是崩溃的原因。你用过UIBarButtonItemStylePlain
吗?
您能否设置一个异常断点以将其范围缩小到触发崩溃的确切代码行?
@JaiGovindani 它似乎没有在代码中崩溃。
您的意思是在模拟器中运行时它不会崩溃?在设备上运行它但连接到 Xcode 怎么样?
没错。它不会在模拟器中崩溃。只有在设备中它才会起吊。
【参考方案1】:
我也遇到了同样的问题。
这是 ABPeoplePickerNavigationController 上的泄漏问题。你必须确保它不会被释放。
我将它声明为一个强大的属性,以确保它不会被释放并且可以正常工作:)
【讨论】:
另见***.com/questions/20146979/…。该问题(不是公认的答案)包含指向其他解决方法的链接:discussions.apple.com/thread/5498630?start=15&tstart=0【参考方案2】:嗯,还有一个更简单的解决方案。实际问题是使用 ABPeoplePickerNavigationController 作为单例对象,将其委托设置为视图控制器,然后关闭视图控制器。所以,就我而言,可行的解决方案是:
(void)peoplePickerNavigationControllerDidCancel: (ABPeoplePickerNavigationController *)peoplePicker peoplePicker.peoplePickerDelegate = nil; // 在解除自我之前清除委托 [self.navigationControllerdismissViewControllerAnimated:YES 完成:nil];
(BOOL)peoplePickerNavigationController: (ABPeoplePickerNavigationController *)peoplePicker shouldContinueAfterSelectingPerson:(ABRecordRef)person 属性:(ABPropertyID)属性 标识符:(ABMultiValueIdentifier)标识符 [自我显示人:人]; peoplePicker.peoplePickerDelegate = nil; // 在解除自我之前清除委托 [self.navigationControllerdismissViewControllerAnimated:YES 完成:nil]; 返回否;
【讨论】:
那么它不会一直崩溃,而不是在特定情况下。以上是关于加载 MKMapView 时崩溃的主要内容,如果未能解决你的问题,请参考以下文章
sigsegv segv_accerr 在 ios7 中崩溃 mkmapview
在 MKMapview regionDidChangeAnimated 方法中使用 NSAutoreleasepool 时应用程序崩溃