加载 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 时崩溃的主要内容,如果未能解决你的问题,请参考以下文章

如果在添加注释时缩放,MKMapView 会崩溃

重新进入视图时 iPod 上的 MKMapView 崩溃

MKMapView 在 iOS 6 上显示用户位置时崩溃

sigsegv segv_accerr 在 ios7 中崩溃 mkmapview

在 MKMapview regionDidChangeAnimated 方法中使用 NSAutoreleasepool 时应用程序崩溃

MKMapView 与 iOS 8 崩溃