我正面临iOS 10的奇怪崩溃问题; iOS 9运行良好。从当前视图控制器以模态方式呈现摄像机视图控制器时,它会崩溃。
这是崩溃的代码行:
- (void)searchBarBookmarkButtonClicked:(UISearchBar *)searchBar {
if (self.searchBar.isFirstResponder) {
[self.searchBar resignFirstResponder];
}
if (self.searchOverlay) {
[self.searchOverlay removeView];
self.searchOverlay = nil;
}
MyCameraScannerViewController *aCameraScannerViewController = [[MyCameraScannerViewController alloc] initWithScanningMessage:@"Please point camera on barcode"];
aCameraScannerViewController.delegate = self;
aCameraScannerViewController.showTargetReticle = YES;
[self.navigationController presentViewController:aCameraScannerViewController animated:YES completion:nil];
}
我遇到以下错误而崩溃:
2016-10-28 12:22:35.494135 MyApp[27308:8137793] *** Assertion failure in void UIViewReportBrokenSuperviewChain(UIView *__strong, UIView *__strong, BOOL)(), /BuildRoot/Library/Caches/com.apple.xbs/Sources/UIKit/UIKit-3599.6.1/UIView.m:190
有人对此次崩盘有任何想法吗?
答案 0 :(得分:1)
您遇到此错误,因为您正在处理其图层的一个UI项目未附加到视图树。
例如,如果您有类似这样的事情,那么(在Swift中):
layer.addSublayer(start.layer)
您必须绝对确定UI元素start已经在视图层次结构中,如下所示:
addSubview(start)
请查看MyCameraScannerViewController的代码,了解具有图层操作的视图,并添加所有必需的addSubview()。
答案 1 :(得分:0)
看起来你正在从后台线程调用presentViewController
。所有UI活动都必须在主线程上进行。
您的UI更新如下:
dispatch_async(dispatch_get_main_queue(), ^{
[navigationController presentViewController:cameraViewController animated:YES completion:nil];
});
答案 2 :(得分:0)
根据您发布的崩溃错误UIViewReportBrokenSuperviewChain
。这意味着问题是在View2上添加一层View1(其中View1没有任何超视图)
请发布更多代码以更清楚地识别问题
答案 3 :(得分:0)
您可以尝试以下代码并检查:
dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(0.5 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
dispatch_async(dispatch_get_main_queue(), ^{
[navigationController presentViewController:cameraViewController animated:YES completion:nil];
});
});