因此,在我的应用程序开始时,用户必须能够扫描QR码。在应用程序设置中,用户可以扫描另一个条形码以更改设置中的某些数据。
在我的应用程序开始时,扫描仪工作正常,但当我尝试扫描settingsVC中的条形码时,我收到以下警告:
Warning: Attempt to present ZXing.Mobile.ZXingScannerViewController: 0x18036dc0 on UINavigationController: 0x16d8afe0 whose view is not in the window hierarchy!
我已经尝试在viewDidAppear
上调用扫描,但我收到同样的警告。
button_ScanAPI.TouchUpInside += async (sender, e) => {
var scanner = new ZXing.Mobile.MobileBarcodeScanner ();
var result = await scanner.Scan ();
if (result != null) {
textField_APIKey.Text = result.Text;
}
};
修改
尝试使用没有异步的条形码扫描仪,但我仍然得到相同的消息。
var scanner = new ZXing.Mobile.MobileBarcodeScanner ();
scanner.Scan (true).ContinueWith (t => {
if (t.Result != null) {
InvokeOnMainThread (() => {
textField_APIKey.Text = t.Result.Text;
});
}
});
我也试过使用AVFoundation导致同样的错误:
Warning: Attempt to present <AVCaptureScannerViewController: 0x16fb1d00> on <UINavigationController: 0x16ebe790> whose view is not in the window hierarchy!
EDIT2:
这是我的应用程序中流程的一部分。
答案 0 :(得分:5)
我认为默认情况下,ZXing库必须寻找最顶级的NavigationController并尝试从那里呈现模态视图控制器。和你一样,我已经在根目录的顶部模拟地呈现了另一个NavigationController。我能够通过将构造函数更改为:
来解决此问题var scanner = new MobileBarcodeScanner (this);
var result = await scanner.Scan ();
其中&#34;这个&#34;是实际调用扫描程序的ViewController。
答案 1 :(得分:1)
答案 2 :(得分:0)
做其中任何一项工作:
显示没有动画的settingsVC
,即来自显示settingsVC
的VC:
[self presentViewController:settingsVC
animated:NO
completion:nil];
或
[self.navigationController pushViewController:settingsVC
animated:NO];
在显示扫描仪之前使用延迟,例如在settingsVC
:
- (void)viewDidAppear:(BOOL)animated
{
[super viewDidAppear:animated];
NSTimeInterval delay = 0.3;
[self performSelector:@selector(showScanner)
withObject:nil
afterDelay:delay];
}
- (void)showScanner
{
// Show scanner here.
}