在iOS 10中以模态方式呈现新的VC时发生崩溃
我在iOS 10中遇到了一个奇怪的崩溃问题; iOS 9的效果很好。当从当前视图控制器模态地呈现相机视图控制器时,它崩溃。在iOS 10中以模态方式呈现新的VC时发生崩溃
这是代码的崩溃行:
- (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
任何人有关于这个崩溃的任何想法?
按照您发布的崩溃错误说:UIViewReportBrokenSuperviewChain
。这意味着,这个问题是与视图2添加视图1层(其中视图1没有任何上海华盈)
请张贴更多的代码,以确定问题更清楚
谢谢@Sharpkits。我已经添加了完整的方法。 – Abhinav
@Abhinav我无法从你更新的代码中获得太多..但似乎self.searchOverlay是一个问题。检查这个链接,你可能会发现解决方案http://stackoverflow.com/questions/39565424/swift-uiviewreportbrokensuperviewchain-cause-by-layer-manipulation –
你可以试试下面的代码,并检查:
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];
});
});
你有这个错误,因为你正在处理其图层的一个UI项目没有附加到视图树。
对于为例(它在SWIFT),如果你有这样的事情:
layer.addSublayer(start.layer)
你必须绝对确保UI元素开始已经在视图层次结构如下:
addSubview(start)
因此,请查看MyCameraScannerViewController的代码,了解使用图层操作的视图并添加所有必需的addSubview()。
这解决了我的问题。你知道为什么你不能将视图的图层添加到子视图的图层吗?这可以在设备上运行,但当我尝试运行时会在模拟器中崩溃。你有什么可以分享的链接来阐述这个吗? – smileBot
你可以添加这个类的整个代码吗? –
@KeyurHirani添加完整的方法。 – Abhinav