Недопустимый контекст CGContext 0x0

: CGContextSetFillColorWithColor: недопустимый контекст 0x0. Это серьезная ошибка. Это приложение или используемая им библиотека использует недействительный контекст и тем самым способствует общей деградации стабильности и надежности системы. Это уведомление является любезностью: пожалуйста исправить эту проблему. Это станет фатальной ошибкой в ​​предстоящем обновлении.

: CGContextSetStrokeColorWithColor: недопустимый контекст 0x0. Эта является серьезной ошибкой. Это приложение или используемая им библиотека использует недействительный контекст и тем самым способствует общему ухудшение стабильности и надежности системы. Это уведомление является любезность: пожалуйста, исправьте эту проблему. Это станет фатальной ошибкой в предстоящее обновление.

и аналогичные ошибки, повторяющиеся с:

  • CGContextSaveGState
  • CGContextSetFlatness
  • CGContextAddPath
  • CGContextDrawPath
  • CGContextRestoreGState
  • CGContextSaveGState
  • CGContextSetFlatness
  • CGContextAddPath
  • CGContextDrawPath
  • CGContextRestoreGState
  • CGContextSetFillColorWithColor
  • CGContextSetStrokeColorWithColor
  • CGContextSetFillColorWithColor
  • CGContextSetStrokeColorWithColor
  • CGContextGetBlendMode
  • CGContextSetBlendMode
  • и многое другое...

В моем приложении я не использую материал CGContext. У меня просто есть UITextView, UIButton и UILabel. Не много добавленных кодов. Просто установите содержание UITextView на:

[self.text_view setText:@"123"];

Как разрешить ошибку?

Я использую Xcode 5.0 (сборка 5A1413), iOS 7 Simulator (64-разрядная Retina 4 "), Mac OS X 10.8.5

Ответ 1

Попробуйте следующее: в xcode добавьте символическую точку останова в CGPostError. (Добавить символическую точку останова и в поле "Тип символа" CGPostError)

При возникновении ошибки отладчик прекратит выполнение кода, и вы можете проверить стек вызовов методов и проверить параметры.

Ответ 2

У меня были подобные ошибки при использовании CGContext и UIBezierPaths, я использовал подход Juraj Antas, и я сразу нашел причину.

Я использую UIImageView с использованием CGContext. Сначала я создаю UIBezierPath, затем рисую его с помощью CGContextAddPath(..). Я узнал, что я устанавливал цвет при создании UIBezierPath, который xcode не нравится и в любом случае перезаписывается CGContextSetStrokeColorWithColor(..). Как только я удалил UIColor.whiteColor().set() из моего кода создания UIBezierPath, ошибки исчезли.

Ответ 3

Спасибо за предложение от @shnaz.

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

Я, вероятно, недостаточно читал документацию, и я новичок в создании UIBezierPath. Оказывается в XCode6, .stroke() и .fill() иногда вызывает недопустимый контекст 0x0.