2012-03-15 4 views
0

私は非常に単純なように見える問題にぶち込まれています。私は、qrコードをスキャンして遊ぶためにzbarライブラリを使用しています。 pushNewScreenが呼び出されるイメージがスキャンされた後に新しい画面を表示しようとしています

- (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]; 
} 

問題があり、mainViewが示されていない...私は、デバッガとpushNewScreen内のすべての行で各行を行っていると呼ばれている。ここに私のコードです。何か案は?代わりに[self pushNewScreen];使用[self performselector:@selector(pushNewScreen) after delay:0.5f];

+0

'[self.navigationController presentModalViewController:animated:completion:]'とは? – Simon

+0

これは廃止されました。使用する - (void)presentViewController:(UIViewController *)viewControllerToPresentアニメーション:(BOOL)フラグの完了:(void(^)(void))完了 –

+0

答えで、私はそれを受け入れることができます... – coder

答えて

0

おかげで、私の代わりに

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

を使用してそれを解決することができました。これが他の人に役立つことを願っています

1

それは問題を解決します。そうでない場合は、遅延のタイミングを増やしてください。 - ライブへ

関連する問題