ios - 为什么我的应用程序在重复呈现和使用 UIImagePickerControllers 时会在 iOS 10 上崩溃?

标签 ios objective-c iphone uiimagepickercontroller

自 iOS 10 推出以来,我们几年前开发的一款应用程序开始崩溃。该应用程序重复呈现 UIImagePickerControllers 以允许用户捕获主题的多张照片。这样做 40 多次后,应用程序崩溃了。这在我们测试过的所有设备上都可以重现,但在引入 iOS 10 之前没有发生。我们在 Info.plist 文件中确实有 NSCameraUsageDescription 和 NSPhotoLibraryUsageDescription 键。

我创建了一个演示该问题的最小示例应用程序。这是最终导致崩溃的代码:

- (IBAction) cameraPressed:(id) sender {
    self.picker = [[UIImagePickerController alloc] init];
    self.picker.sourceType =  UIImagePickerControllerSourceTypeCamera;
    self.picker.delegate = self;
    self.picker.allowsEditing = NO;
    [self presentViewController:self.picker animated:YES completion:nil];
}

当用户重复使用连接到此 IBAction 的相机按钮时,它最终开始变慢(显示选择器开始花费更长的时间),并最终崩溃(通常在相机使用 50 次以上之后)。没有产生崩溃日志,尽管当连接到 Xcode 时,在导致崩溃的控制台中会出现这样的输出:

2016-11-04 20:30:11.884984 WLPBeta[2747:275474] [MC] Invalidating cache
2016-11-04 20:30:11.890776 WLPBeta[2747:273019] [MC] Reading from public effective user settings.
2016-11-04 20:30:13.017608 WLPBeta[2747:275091] [MC] Invalidating cache
2016-11-04 20:30:13.018312 WLPBeta[2747:273019] [MC] Reading from public effective user settings.
2016-11-04 20:30:19.271720 WLPBeta[2747:276311] [MC] Invalidating cache
2016-11-04 20:30:19.279462 WLPBeta[2747:273019] [MC] Reading from public effective user settings.
2016-11-04 20:32:08.229294 WLPBeta[2747:278515] [MC] Invalidating cache
2016-11-04 20:32:08.273941 WLPBeta[2747:273019] [MC] Reading from public effective user settings.
2016-11-04 20:32:09.335711 WLPBeta[2747:278514] [MC] Invalidating cache
2016-11-04 20:32:09.342161 WLPBeta[2747:273019] [MC] Reading from public effective user settings.
2016-11-04 20:32:14.193376 WLPBeta[2747:278515] [MC] Invalidating cache
2016-11-04 20:32:14.213902 WLPBeta[2747:273019] [MC] Reading from public effective user settings.
2016-11-04 20:32:47.944657 WLPBeta[2747:275091] [MC] Invalidating cache
2016-11-04 20:32:47.972053 WLPBeta[2747:273019] [MC] Reading from public effective user settings.
2016-11-04 20:32:48.550934 WLPBeta[2747:279485] [MC] Invalidating cache
2016-11-04 20:32:48.575065 WLPBeta[2747:273019] [MC] Reading from public effective user settings.
2016-11-04 20:32:50.855308 WLPBeta[2747:279485] [MC] Invalidating cache
2016-11-04 20:32:50.856329 WLPBeta[2747:273019] [MC] Reading from public effective user settings.
2016-11-04 20:32:52.201535 WLPBeta[2747:275091] [GatekeeperXPC] Connection to assetsd was interrupted or assetsd died

我还向 Apple 发布了错误报告,并将其添加到开放雷达:http://www.openradar.me/radar?id=4941109843197952

有人遇到过这个问题吗?是否有一个修复程序可以让我们在不使用 Xcode 8 重新编译应用程序的情况下解决这个问题?不幸的是,我们正在使用尚未为 Xcode 8 和 iOS 10 SDK 做好准备的第三方库,因此我们仍在使用 Xcode 7.3.1 构建应用程序。

编辑:这是指向 Github 存储库的链接,其中包含可用于演示问题的示例应用程序。

https://github.com/lolay/ImagePickerTest

编辑 2:如果我更改代码以便在 viewDidLoad 中分配和初始化选取器,它仍然会在使用相机按钮大约相同次数后崩溃。

- (void)viewDidLoad {
    [super viewDidLoad];
    self.picker = [[UIImagePickerController alloc] init];
    self.picker.sourceType =  UIImagePickerControllerSourceTypeCamera;
    self.picker.allowsEditing = NO;
}

- (IBAction) cameraPressed:(id) sender {
    [self presentViewController:self.picker animated:YES completion:nil];
}

最佳答案

您的 UIImagePickerController 被定义为 STRONG。

请将其更改为 weak 或确保在销毁 View 之前该对象为 nil。

关于ios - 为什么我的应用程序在重复呈现和使用 UIImagePickerControllers 时会在 iOS 10 上崩溃?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40512979/

相关文章:

ios - 有没有办法在 AVPlayerViewController 中显示自定义字幕轨道名称

iphone - 推送 View Controller : Is this a memory leak?

iPhone 应用程序未显示在装有 iOS6 的 iPad 上的 App Store 中

iphone - 从 MKMapView 获取 map 图像

c++ - 在不同平台上从 stringstream 解析数字时的行为不一致

ios - 无法使模态视图出现在 iPad iOS6 的屏幕中央

ios - 正则表达式卡在 iPhone 中用于电子邮件验证

ios - RLMArray 对象未与其对象一起存储

ios - UITextView 展开时移动元素

iphone - 为什么我的触摸坐标无法在屏幕上正确映射?