2013-09-26 29 views
14

Chúng tôi đang sử dụng đầu đọc mã vạch Zbar từ 2 năm qua. Với iOS 7 và Xcode 5, sau khi quét 5 mã vạch, ứng dụng đang đạt mức sử dụng CPU 100% cho thiết bị iOS 7 (tôi có thể thấy rằng trong chế độ gỡ lỗi Xcode) và ứng dụng trở nên ít nhạy hơn. Chúng tôi chưa bao giờ gặp sự cố trong các phiên bản iOS trước đó, mọi thứ đều hoạt động tốt.Zbar SDK và ios7/xcode 5 - Ứng dụng đang sử dụng 100% cpu và bộ nhớ hơn 100MB

Điều gì đã thay đổi trong iOS 7 liên quan đến việc khởi chạy máy ảnh và ZBar SDK chưa được cập nhật? Có ai khác đang gặp vấn đề tương tự với iOS 7 không?

+0

người dùng zbar khác cũng phải đối mặt với cùng một vấn đề. đây là liên kết - https://sourceforge.net/p/zbar/discussion/1072195/thread/df4c215a/#b4cc – RGRG

Trả lời

18

giải quyết thực hiện điều này: trong viewdidload

readerqr = [ZBarReaderViewController new]; 
    readerqr.readerDelegate = self; 
    readerqr.showsHelpOnFail = NO; 

ZBarImageScanner *scanner = readerqr.scanner; 
[scanner setSymbology: 0 
       config: ZBAR_CFG_ENABLE 
        to: 0]; 
[scanner setSymbology: ZBAR_QRCODE 
       config: ZBAR_CFG_ENABLE 
        to: 1]; 

// you can use this to support the simulator 
if(TARGET_IPHONE_SIMULATOR) { 
    cameraSim = [[ZBarCameraSimulator alloc] 
       initWithViewController: self]; 
    cameraSim.readerView = readerView; 
} 

tạo ZBarReaderViewController *readerqr; như một tài sản của viewController của bạn.

để sử dụng nó:

-(void) showqr:(id)sender 
{ 
    [self presentViewController:readerqr animated:YES completion:nil]; 
    return; 
} 

Bằng cách này hoạt động, không rò rỉ, không có cpu 100%

+0

điều này phù hợp với tôi. Cảm ơn. (nó có nghĩa là có rò rỉ trong thư viện) –

+1

Bạn cần phải hiển thị tuyên bố của các biến Tôi không có ý tưởng một readerview là gì. – Alioo

+0

@joaquin Mã của bạn trông như thế nào trước khi bạn giải quyết vấn đề? Tôi đã có cùng một vấn đề nhưng tôi không thể khắc phục nó bằng cách triển khai mã của bạn. –

7

Sau khi nhìn thấy cùng một vấn đề,

tôi chuyển từ

ZBarReaderViewController

đến

ZBarReaderView

Phần đáng thất vọng điều này, tuy nhiên, là nếu bạn đang sử dụng các tính năng như Overlay trong ZBarReaderViewController, bạn phải mã hóa lại làm thế nào mà tất cả các công trình và bạn phải thực hiện những thứ như bắt đầu và dừng máy quét, bằng tay.

Nhưng về cơ bản, bạn cần một cái gì đó như thế này trong IBAction của bạn:

ZBarReaderView *reader = [ZBarReaderView new]; 
[self.view addSubview:reader]; 

reader.readerDelegate = self; 
reader.tracksSymbols=YES; 

ZBarImageScanner *scanner = reader.scanner; 

reader.tag = 99999999; 

// phần quan trọng ở đây là để bắt đầu quét

[reader start]; 

Ngoài ra, hãy nhớ thay đổi đại diện của bạn trong header to ZBarReaderViewDelegate

Ngoài ra, ủy nhiệm "phương thức" được gọi, ít nhất là trong mã của tôi, bây giờ là (so với imagePickerController)

-(void) readerView: (ZBarReaderView*) view 
     didReadSymbols: (ZBarSymbolSet*) syms 
     fromImage: (UIImage*) img 
      { 

      for(ZBarSymbol *sym in syms) { 

      [view stop]; 

      [self closeCameraScanner]; 

    // I am also setting reader to NIL but I don't really know if this is necessary or not. 

      reader=nil; 
     } 


    } 


    -(void)closeCameraScanner{ 

     UIView * v = [self.view viewWithTag:99999999]; 
     if (nil != v) { 
      [v removeFromSuperview]; 
     } 

     [self.view endEditing:YES]; 

    } 

Vì vậy, đó là cách nhanh chóng và dơ bẩn để thực hiện việc này. Tôi có một số mã bổ sung cho việc tạo lớp phủ theo cách thủ công và để hạn chế việc quét hình ảnh nhưng theo cách đơn giản là nó đang chạy, điều này đã làm cho tôi một mẹo.

+0

reader.tag = 99999999; không làm việc cho tôi. – Nirav

+0

Không có gì hiển thị khi tôi đặt điều này trong hành động của tôi nhưng đủ kỳ quặc đèn flash của tôi bật? – Alioo

+0

Câu trả lời hay! Vấn đề bộ nhớ của tôi đã được sửa mà không cần phải làm gì đặc biệt với máy quét. Tôi chỉ sử dụng ZBarReaderView và ZBarReaderViewDelegate thay vì ZBarReaderViewController và ZBarReaderDelegate. Tôi bắt đầu readerView trong viewDidAppear và dừng nó trong viewDidDisapper, nó hoạt động cho ứng dụng cụ thể của tôi. – Eric

3

tôi đã khắc phục vấn đề ngay bây giờ bằng cách triển khai Diff từ nguồn. Nếu ai đó bạn cần, bạn có thể tải xuống SDK zBar đã biên dịch với Hỗ trợ iOS7 tại đây.

Bạn chỉ có thể thay thế libzbar.a - thao tác này sẽ hoạt động. Nhưng tôi tải lên SDK hoàn chỉnh như một người nào đó có thể cần nó quá với tiêu đề, vv

http://nerdvision.net/app-development/ios/zbar-sdk

+0

Điều này không hoạt động. Tôi cũng đã biên soạn nhị phân của riêng tôi bằng cách sử dụng .diff [ở đây] (http://sourceforge.net/p/zbar/patches/36/) mà tôi giả định là những gì bạn đã làm, nhưng nó không hoạt động cũng –

+1

bạn có thể vui lòng xây dựng lại thư viện và thêm i386 slice. Nó không hoạt động trên mô phỏng –

4

tôi đã giải quyết được vấn đề mà Barry Mc G đã có.

Tôi đã gặp sự cố tương tự ngay cả sau khi đã vá SDK zBar với iOS7 từ http://nerdvision.net/app-development/ios/zbar-sdk. (thứ 5 - lần thứ 6 mở trang nó bị đóng băng ở 100% CPU.)

Cho dù bạn phân lớp ZBarViewController hoặc sử dụng nó trực tiếp, bạn trình bày bộ điều khiển xem và loại bỏ nó sau khi bạn đã hoàn thành với máy quét. Tôi đã tìm ra lý do tại sao điều này xảy ra và lý do là tôi không dừng phát video. Trong ZBarReaderView, có một chức năng - (void) dừng lại; và nếu bạn chạy chức năng này sau khi bạn đã hoàn thành với máy quét, bạn sẽ không thấy vấn đề (lần thứ 5 - thứ 6 mở trang nó bị đóng băng ở 100% CPU.). Ít nhất trong trường hợp của tôi nó làm việc và hy vọng nó hoạt động cho bạn là tốt.

+1

bạn có thể vui lòng xây dựng lại thư viện và thêm lát i386. Nó không hoạt động trên trình mô phỏng –

0

Tôi đã gặp vấn đề tương tự và dễ dàng sửa. Không nhớ mã dưới đây. Bạn phải đặt mã này khi hết chế độ xem.

[điểm dừng đọc];

sự cố quá tải trên CPU gây ra bởi luồng máy ảnh bị trùng lặp.

0

đã có cùng một vấn đề, Scanner có vẻ là đóng băng ..
tôi cố định nó như Joaquin ...
Tạo một tài sản cho người đọc và khi bạn gọi nó nhiều lần, bạn có thể kiểm tra, nếu một đối tượng của người đọc nơi khởi ...
đây là những gì tôi đang thực hiện:

- (IBAction)ShowZBarReader 
{ 
    // ADD: present a barcode reader that scans from the camera feed 
    if (!self.reader) { 
     self.reader = [[ZBarReaderViewController alloc]init]; 
    } 

    self.reader.readerDelegate = self; 
    self.reader.supportedOrientationsMask = ZBarOrientationMaskAll; 

    ZBarImageScanner *scanner = self.reader.scanner; 
    // zusätliche Configurationen ... 

    [scanner setSymbology: ZBAR_I25 
        config: ZBAR_CFG_ENABLE 
         to: 0]; 
    // stellt Bild zur verfügung 
    [self presentViewController:self.reader animated:YES completion:nil]; 
} 

làm việc một cách hoàn hảo đối với tôi! Hy vọng nó sẽ giúp :)

Các vấn đề liên quan