2012-03-15 2 views
0

Я столкнулся с проблемой, которая кажется настолько упрощенной, но расстраивает. Я использую библиотеку zbar для воспроизведения с помощью qr-кодов сканирования. Вот мой код:пытается показать новый экран после сканирования изображения

- (IBAction)scanButtonTapped:(id)sender { 

// ADD: present a barcode reader that scans from the camera feed 
ZBarReaderViewController *reader = [ZBarReaderViewController new]; 
reader.readerDelegate = self; 
reader.supportedOrientationsMask = ZBarOrientationMaskAll; 
reader.showsZBarControls = NO; 

UIButton *overlay = [UIButton buttonWithType:UIButtonTypeCustom]; 
overlay.frame = CGRectMake(0, 0, 320, 480); 
[overlay setImage:[UIImage imageNamed:@"CameraCover.png"] forState:UIControlStateNormal]; 
reader.cameraOverlayView = overlay; 

overlay.userInteractionEnabled = YES; 
[overlay addTarget:self action:@selector(beginScanning:) forControlEvents:UIControlEventTouchUpInside]; 




ZBarImageScanner *scanner = reader.scanner; 
// TODO: (optional) additional reader configuration here 

// EXAMPLE: disable rarely used I2/5 to improve performance 
[scanner setSymbology: ZBAR_I25 
       config: ZBAR_CFG_ENABLE 
        to: 0]; 

// present and release the controller 
[self presentModalViewController: reader 
         animated: NO]; 
[reader release]; 



} 

- (void) imagePickerController: (UIImagePickerController*) reader 
didFinishPickingMediaWithInfo: (NSDictionary*) info 
{ 
// ADD: get the decode results 
id<NSFastEnumeration> results = 
[info objectForKey: ZBarReaderControllerResults]; 
ZBarSymbol *symbol = nil; 
for(symbol in results) 
    // EXAMPLE: just grab the first barcode 
    break; 

// EXAMPLE: do something useful with the barcode data 
resultText.text = symbol.data; 

// EXAMPLE: do something useful with the barcode image 
resultImage.image = 
[info objectForKey: UIImagePickerControllerOriginalImage]; 


// ADD: dismiss the controller (NB dismiss from the *reader*!) 
[reader dismissModalViewControllerAnimated: YES]; 

[self pushNewScreen]; 

} 

-(void) pushNewScreen 
{ 
MainViewController *mainView = [[MainViewController alloc] initWithNibName:@"MainViewController" bundle:nil]; 
[self presentModalViewController:mainView animated:YES]; 
[mainView release]; 
} 

Проблема заключается в том, когда pushNewScreen называется, mainView не показан ... Я прошел через каждую строку с отладчиком и каждой строкой в ​​pushNewScreen называется. Есть идеи?

+0

что касается '[self.navigationController presentModalViewController: анимированный: завершение:]'? – Simon

+0

Это устарело, попробуйте использовать - (void) presentViewController: (UIViewController *) viewControllerToPresent animated: (BOOL) завершение флага: (void (^) (void)) завершение вместо –

+0

, которое сработало .... если вы положите его в ответ я могу принять это ... – coder

ответ

0

Благодаря A-Live, я был в состоянии решить эту проблему с помощью

- (void)presentViewController:(UIViewController *)viewControllerToPresent animated:(BOOL)flag completion:(void (^)(void))completion 

вместо этого. Надеюсь, это поможет кому-то еще!

1

Вместо [self pushNewScreen]; использовать [self performselector:@selector(pushNewScreen) after delay:0.5f];

Это решит проблему. Если нет, увеличьте время задержки.