6

XZINGObjCフレームワークを使用して EAN-Barcode-Image を作成しています。ドキュメントに従って、私はそれを次のようにやっています

 //in viewDidAppear

 //XZING: create Matrix
 NSString* eanString = @"1234567890123";  //sth. like that
 ZXBitMatrix* result = [writer encode:eanString
                              format:kBarcodeFormatEan13
                               width:500
                              height:500
                               error:&error];
if (result) {
      //XZING: convert matrix to CGImageRef
      CGImageRef imageRef = [[ZXImage imageWithMatrix:result] cgimage]; 

      //CRASHLINE HERE!! (this is NOT in the XZING documentation, but i cannot figure out the issue!)
      UIImage* uiImage = [[UIImage alloc] initWithCGImage:imageRef];  //<--CRASH: EXC_BAD_ACCESS

      if(image != nil){
          //assigning image to ui
          self.barCodeImageView.image = uiImage;   
      }

ブレークポイントを使用してこのコードをステップスルーすると、うまくいきます! しかし、ある時点で画像を使用する準備ができていないと思いますか?! しかし、私はその理由を見つけることができません。

私が試したこと:

  • imageRefとをローカル変数として使用uiImage(EXC_BAD_ACCESS CRASH)
  • バックグラウンド スレッドでその操作を試行しました (EXC_BAD_ACCESS CRASH)

ここでも同じですが、ブレークポイントを使用してコードを 1 行ずつ実行した場合、すべてのソリューションが機能しました。ここで私の間違いは何ですか?何か案は?前もって感謝します!

4

3 に答える 3

13

試行錯誤のプログラミングの後、次の行を置き換えることで問題を修正できました

  CGImageRef imageRef = [[ZXImage imageWithMatrix:result] cgimage]; 
  UIImage* uiImage = [[UIImage alloc] initWithCGImage:imageRef];  //<--CRASH

 UIImage* uiImage = [[UIImage alloc] initWithCGImage:[[ZXImage imageWithMatrix:result] cgimage]];

それでも、なぜだかわからない!? 何かがメモリに保持されていないか、CGImageRefに変換しようとしても準備ができていない可能性がありUIImageます。

于 2014-05-12T13:36:57.057 に答える