2014-10-25 4 views
3

Мое приложение вдруг начал генерировать много ошибок такого типа:Многие ошибки CGContext недопустимый контекст 0x0 IOS 8

<Error>: CGContextSetInterpolationQuality: invalid context 0x0. This is a serious error. 
This application, or a library it uses, is using an invalid context and is thereby contributing 
to an overall degradation of system stability and reliability. This notice is a courtesy: please 
fix this problem. It will become a fatal error in an upcoming update. 

и так далее для CGContextDrawImage, CGBitmapContextCreateImage и т.д.

Я ясно что-то серьезно, но я не уверен, что. Я использую приведенный ниже код, который я адаптировал для кого-то другого для своего приложения. Он в основном изменяет размер изображения с учетом устройства.

Код, кажется, работает нормально, и мое приложение выполняет то, что ожидается, но я не уверен, что вызывает ошибки, которые кажутся довольно серьезными. Может ли кто-нибудь увидеть что-то очевидное в моем коде, которое может вызвать эти ошибки?

-(UIImage *)resizeImage:(NSString *)imageName { 

    UIImage *originalImage = [UIImage imageNamed:imageName]; 
    CGRect newRect = CGRectIntegral(CGRectMake(0, 0, originalImage.size.width * myScalingFactor, originalImage.size.height * myScalingFactor)); 
    CGImageRef imageRef = originalImage.CGImage; 
    CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceRGB(); 

    CGContextRef bitmap = CGBitmapContextCreate(
               NULL, 
               newRect.size.width, 
               newRect.size.height, 
               8, 
               (newRect.size.width * 4), 
               colorSpace, 
               kCGImageAlphaPremultipliedLast 
               ); 

    CGColorSpaceRelease(colorSpace); 
    CGContextSetInterpolationQuality(bitmap, 3); 
    CGContextDrawImage(bitmap, newRect, imageRef); 
    CGImageRef newImageRef = CGBitmapContextCreateImage(bitmap); 
    UIImage *newImage = [UIImage imageWithCGImage:newImageRef]; 
    CGContextRelease(bitmap); 
    CGImageRelease(newImageRef); 

    return newImage; 
} 

ответ

11

CGContextSetInterpolationQuality: invalid context 0x0. означает, что параметр context передается CGContextSetInterpolationQuality был пустой указатель (отсюда память адрес 0x0).

Чтобы избежать этого, вы должны проверить, возвращается ли CGBitmapContextCreateNULL. Это может произойти, если вы указали недопустимую ширину/высоту (либо ноль).

+0

Отлично, это была проблема. Я загружал изображение, которого не было, и передавая таким образом значение 0 в контекст. Большое спасибо за ответ. – pingin

+0

Я получаю эту ошибку в этом случае http://stackoverflow.com/questions/6592073/speed-up-saving-image-ios – loretoparisi

-2

Редактировать. Aug 2017
Это, вероятно, бесполезный совет. Я не удаляю его ради потомства. Я не могу вспомнить обстоятельства, что это произошло, так что это едва ли ценность.


Это ошибка, которую я только что научился игнорировать.
Это довольно сложно сделать серьезным, когда даже iOS сильно страдает от этой ошибки. Если вы подключите свое устройство к вашему Mac и посмотрите на консоль отладки, вы увидите, что Springboard также регистрирует эти ошибки все время. На скриншоте ниже я просто менял яркость экрана, которая посылала консоль устройства в овердрайв. enter image description here

К сожалению, при отладке это загромождает консоль, но в соответствии с this нити, это проблема с прошивкой и может быть проигнорировано.

Редактировать
Я не знаю, почему я продолжаю получать downvoted за этот ответ. Я привел свой источник, который показывает, что Apple явно признает, что это проблема с ОС. Если кто-то еще почувствует необходимость понизить, скажите, пожалуйста, где я ошибся. Приветствия вроде. enter image description here

+0

Причина, по которой вы продолжаете получать downvoted, - это ваша фраза «Это ошибка, которая у меня есть научился игнорировать ». Разработчик программного обеспечения не может научиться игнорировать ошибки. – fotisgpap

+0

@fotisgpap хорошо, учитывая, что это была известная ошибка ОС, я ничего не могу с этим поделать. Я не склонен игнорировать ошибки, однако, когда мои руки и инженеры Apple говорят мне игнорировать это, я делаю именно это. Как неудовлетворенность, я сделал это как таковое. Я не могу точно декомпилировать iOS и развернуть его, не так ли? Я совершенно ясно не проигнорировал его сначала, поэтому я нашел этот пост и вопрос форума Apple, среди прочих. – mylogon

+0

, но, как вы можете видеть из приведенного выше ответа, есть определенные случаи, что ошибка вызвана разработчиком.Если каждый последует за вашим советом, чтобы игнорировать эту ошибку, потому что в некоторых случаях это ошибка ios, люди не найдут решения для случая, это ошибка разработчика. Было бы хорошо перефразировать его. Вы могли бы сказать, что в вашем случае (описать ваше дело) это ошибка ios, и вы можете ее игнорировать. – fotisgpap

Смежные вопросы