Сбой IOS "не удалось выполнить код поддержки для чтения Objective-C" на IOS 12.4.2 не на 12.0.1 - PullRequest
0 голосов
/ 21 октября 2019

Этот метод возвращает qr кодовое изображение строки. Он работает правильно на Ios 12.0.1 (iphone SE), но на 12.4.2 (iphone 6) происходит сбой. Сбой метода, когда я пытаюсь назначить результирующее UIImage для UIImageView, результирующее UIImage не равно nil.

-(UIImage*)get_QR_image :(NSString*)qrString :(UIColor*)ForeGroundCol :(UIColor*)BackGroundCol{

    NSData *stringData = [qrString dataUsingEncoding: NSUTF8StringEncoding];

    CIFilter *qrFilter = [CIFilter filterWithName:@"CIQRCodeGenerator"];
    [qrFilter setValue:stringData forKey:@"inputMessage"];
    [qrFilter setValue:@"H" forKey:@"inputCorrectionLevel"];


    CIImage *qrImage = qrFilter.outputImage;
    float scaleX = 320;
    float scaleY = 320;


    CIColor *iForegroundColor = [CIColor colorWithCGColor:[ForeGroundCol CGColor]];
    CIColor *iBackgroundColor = [CIColor colorWithCGColor:[BackGroundCol CGColor]];

    CIFilter * filterColor = [CIFilter filterWithName:@"CIFalseColor" keysAndValues:@"inputImage", qrImage, @"inputColor0", iForegroundColor, @"inputColor1", iBackgroundColor, nil];

    CIImage *filtered_image = [filterColor valueForKey:@"outputImage"];

    filtered_image = [filtered_image imageByApplyingTransform:CGAffineTransformMakeScale(scaleX, scaleY)];

    UIImage *result_image = [UIImage imageWithCIImage:filtered_image
                                                 scale:[UIScreen mainScreen].scale
                                           orientation:UIImageOrientationUp];


    return result_image;
}

строка, участвующая в сбое:

filtered_image = [filtered_image imageByApplyingTransform:CGAffineTransformMakeScale(scaleX, scaleY)];

создает этот журнал:

warning: could not execute support code to read Objective-C class data in the process. This may reduce the quality of type information available.

В моем методе есть что-то, что работает только на 12.0.1? Или может что-то не так? Как я могу исследовать больше, чтобы решить эту аварию?

РЕДАКТИРОВАТЬ

enter image description here

в красном, у меня есть:

MyQrCodeImageViewBig.image=qrimage;

с сообщением:

Thread 1: EXC_BREAKPOINT (code=1, subcode=0x1a83e146c)

1 Ответ

0 голосов
/ 22 октября 2019

Я вижу много проблем, связанных с инициализатором [UIImage imageWithCIImage:]. Основная проблема в том, что CIImage на самом деле не содержит никаких растровых данных. Сначала он должен быть обработан CIContext. Таким образом, цель, которой вы назначаете UIImage для потребностей , знает , что она поддерживается CIImage, который все еще нуждается в рендеринге. Обычно UIImageView хорошо с этим справляется, но я бы не стал слишком сильно этому доверять.

Вместо этого вы можете сделать собственное изображение в растровое изображение (CGImage) и инициализировать UIImage с помощьюэто вместо. Для этого вам понадобится CIContext, который я рекомендую вам создать где-то за пределами этого метода один раз и использовать его каждый раз, когда вам нужно визуализировать изображение (это дорогой объект):

self.context = [CIContext context];

Затем в вашем методе вы визуализируете изображение так:

CGImageRef cgImage = [self.context createCGImage:filtered_image fromRect:[filtered_image extent]];
UIImage* result_image = [UIImage imageWithCGImage:cgImage];
...