Я использую ZBarSDK (http://zbar.sourceforge.net/iphone/) в своем приложении. Он работает отлично и очень быстро, но я нашел проблему. Я получаю это предупреждение в консоли, а viewerController сканера никогда не увольняется. Это происходит только тогда, когда я пытаюсь отсканировать штрих-код, который я уже сфокусировал. Я имею в виду, когда я нажимаю кнопку, открывающую считыватель viewController, а затем фокусирую камеру, где находится штрих-код, он отлично работает, viewController исчезает, и я получаю код. Но проблема в том, что я уже сосредоточил iPad на штрих-коде, а затем нажимаю кнопку считывателя. Читатель viewController представлен, я получаю код, но viewController не уволен, и я получаю это предупреждение:ZBarSDK не упускает viewController
Предупреждение. Попытайтесь убрать из контроллера просмотра во время презентации или увольнения!
Это код используется:
- (void)escanearCodigo
{
ZBarReaderViewController *escanearVC = [ZBarReaderViewController new];
escanearVC.readerDelegate = self;
escanearVC.supportedOrientationsMask = ZBarOrientationMaskAll;
// Presentar pantalla escaneo
[self presentViewController:escanearVC animated:YES completion:nil];
}
- (void) imagePickerController: (UIImagePickerController*) reader
didFinishPickingMediaWithInfo: (NSDictionary*) info
{
// Obtener el resultado del escaneo
id<NSFastEnumeration> results = [info objectForKey: ZBarReaderControllerResults];
ZBarSymbol *symbol = nil;
for(symbol in results)
//Almacenar el codigo de barras
break;
NSLog(@"Code: %@", symbol.data);
[reader dismissViewControllerAnimated:YES completion:nil];
}
Я надеюсь, что я объяснил хорошо :)
Спасибо заранее.
ОБНОВЛЕНО: не До сих пор лучшее «половинное решение» является следующим: Поместите код didFinishPickingMediaWithInfo внутри если предложение, чтобы предотвратить этот код будет Exec, когда ViewController не представлены еще (я думаю) :
- (void) imagePickerController: (UIImagePickerController*) reader
didFinishPickingMediaWithInfo: (NSDictionary*) info
{
if (![reader isBeingPresented]) {
// Obtener el resultado del escaneo
id<NSFastEnumeration> results = [info objectForKey: ZBarReaderControllerResults];
ZBarSymbol *symbol = nil;
for(symbol in results)
//Almacenar el codigo de barras
break;
[reader dismissViewControllerAnimated:YES completion:nil];
}
}
Вызывается метод 'didFinishPickingMediaWithInfo', когда диспетчер просмотра не увольняется? Вы тестировали его с помощью NSLog? – pmk
спасибо! Я написал файл didFinishPickingMediaWithInfo внутри if (! [Reader isBeingPresented]), и предупреждение исчезнет, но мне нужно сфокусировать другую область (без штрих-кода), а затем сфокусироваться на области штрих-кода, чтобы ее отсканировать. До сих пор это лучшее решение :) Спасибо u! – javiazo
попробуйте очистить кеш ZBarReaderView при представлении ZBarreaderViewcontroller * [escanearVC.readerView flushCache]; * – Bala