objective-cuiimageexc-bad-accesscgimageref

Objective C: How to convert CGImageRef to UIImageView?


I'm using the XZINGObjC framework to create an EAN-Barcode-Image. Following the documentation, I'm doing it like

 //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;   
      }

It works, if I step through this code using breakpoints! However, I think at some point an Image is not ready for use?! But I cannot find the reason.

What I tried:

Same here, every solution worked if I used breakpoints and stepped line by line through the code. What is my mistake here? Any ideas? Thanks in advance!


Solution

  • After some try and error programming, I could fix the issue by replacing the following lines

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

    with

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

    Still, I don't know why?! I'm pretty sure something isn't hold in the memory or maybe the CGImageRef isn't ready if I try to convert it to UIImage.