2014-01-16 1 views
0

У меня есть панель вкладок и контроллер навигации для моего приложения. всякий раз, когда я нажмите на вкладку сканирования, он продолжал бросать меня Тема 1: ошибка EXC_BAD_ACCESS на линии:Сканер штрих-кода ZXingObjc в ошибках ошибки штриховки

ZXCapture.m

[output ZXQT(setDelegate:)ZXAV(setSampleBufferDelegate:)self 

Вот мой код: панель вкладок:

TestScanViewController *scannerViewController=[[TestScanViewController alloc] initWithNibName:@"TestScanViewController" bundle:nil]; 
navigationController =[[UINavigationController alloc] initWithRootViewController:scannerViewController]; 

в TestScanViewController.h:

@interface TestScanViewController : UIViewController <ZXCaptureDelegate> 
@end 

в TestScanViewController.m:

#import <AudioToolbox/AudioToolbox.h> 
#import <AVFoundation/AVFoundation.h> 
#import "TestScanViewController.h" 

@interface TestScanViewController() 
@property (nonatomic, strong) ZXCapture* capture; 
@property (nonatomic, weak) IBOutlet UILabel* decodedLabel; 

@end 

@implementation TestScanViewController 


#pragma mark - View Controller Methods 

- (void)viewDidLoad { 
[super viewDidLoad]; 

} 

- (void)viewWillAppear:(BOOL)animated { 
    [super viewWillAppear:animated]; 


    NSLog(@"%s",__PRETTY_FUNCTION__); 

    if (self.capture == nil) { 
     self.capture = [[ZXCapture alloc] init]; 
     self.capture.delegate = self; 
     self.capture.rotation = 90.0f; 

     // Use the back camera 
     self.capture.camera = self.capture.back; 
     self.capture.layer.frame = self.view.bounds;; 
     [self.view.layer addSublayer:self.capture.layer]; 

     [self.view bringSubviewToFront:self.decodedLabel]; 
    }else{ 
     [self.capture start]; 
     [self.view.layer addSublayer:self.capture.layer]; 
    } 

} 

- (void)viewWillDisappear:(BOOL)animated { 
    [super viewWillDisappear:animated]; 
    NSLog(@"%s",__PRETTY_FUNCTION__); 

    [self.capture.layer removeFromSuperlayer]; 
    [self.capture stop]; 

} 

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation { 
    return toInterfaceOrientation == UIInterfaceOrientationPortrait; 
} 

#pragma mark - Private Methods 

- (NSString*)displayForResult:(ZXResult*)result { 
    } 

    return [NSString stringWithFormat:@"Scanned!\n\nFormat: %@\n\nContents:\n%@", formatString, result.text]; 
} 

#pragma mark - ZXCaptureDelegate Methods 

- (void)captureResult:(ZXCapture*)capture result:(ZXResult*)result { 
    if (result) { 
     // We got a result. Display information about the result onscreen. 
     [self.decodedLabel performSelectorOnMainThread:@selector(setText:) withObject:[self displayForResult:result] waitUntilDone:YES]; 

     // Vibrate 
     AudioServicesPlaySystemSound(kSystemSoundID_Vibrate); 
    } 
} 

- (void)captureSize:(ZXCapture*)capture width:(NSNumber*)width height:(NSNumber*)height { 
} 

@end 

так же, как примеры кодов из GitHub: https://github.com/TheLevelUp/ZXingObjC/blob/master/examples/BarcodeScanner/ViewController.m

ответ

0

У меня была такая же проблема. Если вы ориентируетесь на iOS версии 6 или выше и используете ARC, то причиной проблемы является неполная миграция в ARC в ZXCapture.m.

Посмотрите вокруг линии 56 для этого кода:

@interface ZXCapture() 

@property (nonatomic, assign) dispatch_queue_t captureQueue; 

@end 

assign является пережитком, прежде чем ARC дней. Это также вызывает предупреждение компилятора, что явилось ключом к решению. Для решения проблемы, поменяйте код на:

@interface ZXCapture() 

@property (nonatomic, strong) dispatch_queue_t captureQueue; 

@end