Ich habe so viele Suchergebnisse gelesen, wie ich zu diesem gefürchteten Problem finden konnte. Leider scheint sich jedes auf einen bestimmten Funktionsaufruf zu konzentrieren.
Mein Problem ist, dass ich denselben Fehler von mehreren Funktionen erhalte, von denen ich vermute, dass sie von den von mir verwendeten Funktionen zurückgerufen werden.
Um die Sache noch schlimmer zu machen, befindet sich der eigentliche Code in einem benutzerdefinierten privaten Framework, das in ein anderes Projekt importiert wird, und als solches ist das Debuggen nicht so einfach?
Kann mich jemand in die richtige Richtung weisen? Ich habe das Gefühl, dass ich bestimmte Methoden falsch oder mit schlechtem Kontext aufrufe, aber die Ausgabe von xcode ist derzeit nicht sehr hilfreich.
: CGContextSetFillColorWithColor: Ungültiger Kontext 0x0. Dies ist ein schwerwiegender Fehler. Diese Anwendung oder eine von ihr verwendete Bibliothek verwendet einen ungültigen Kontext und trägt dadurch zu einer allgemeinen Verschlechterung der Systemstabilität und -zuverlässigkeit bei. Dieser Hinweis ist eine Höflichkeit: Bitte beheben Sie dieses Problem. Bei einem bevorstehenden Update wird dies zu einem schwerwiegenden Fehler.
: CGContextSetStrokeColorWithColor: Ungültiger Kontext 0x0. Dies ist ein schwerwiegender Fehler. Diese Anwendung oder eine von ihr verwendete Bibliothek verwendet einen ungültigen Kontext und trägt dadurch zu einer allgemeinen Verschlechterung der Systemstabilität und -zuverlässigkeit bei. Dieser Hinweis ist eine Höflichkeit: Bitte beheben Sie dieses Problem. Bei einem bevorstehenden Update wird dies zu einem schwerwiegenden Fehler.
CGContextSaveGState: Ungültiger Kontext 0x0. Dies ist ein schwerwiegender Fehler. Diese Anwendung oder eine von ihr verwendete Bibliothek verwendet einen ungültigen Kontext und trägt dadurch zu einer allgemeinen Verschlechterung der Systemstabilität und -zuverlässigkeit bei. Dieser Hinweis ist eine Höflichkeit: Bitte beheben Sie dieses Problem. Bei einem bevorstehenden Update wird dies zu einem schwerwiegenden Fehler.
: CGContextSetFlatness: Ungültiger Kontext 0x0. Dies ist ein schwerwiegender Fehler. Diese Anwendung oder eine von ihr verwendete Bibliothek verwendet einen ungültigen Kontext und trägt dadurch zu einer allgemeinen Verschlechterung der Systemstabilität und -zuverlässigkeit bei. Dieser Hinweis ist eine Höflichkeit: Bitte beheben Sie dieses Problem. Bei einem bevorstehenden Update wird dies zu einem schwerwiegenden Fehler.
: CGContextAddPath: Ungültiger Kontext 0x0. Dies ist ein schwerwiegender Fehler. Diese Anwendung oder eine von ihr verwendete Bibliothek verwendet einen ungültigen Kontext und trägt dadurch zu einer allgemeinen Verschlechterung der Systemstabilität und -zuverlässigkeit bei. Dieser Hinweis ist eine Höflichkeit: Bitte beheben Sie dieses Problem. Bei einem bevorstehenden Update wird dies zu einem schwerwiegenden Fehler.
: CGContextDrawPath: Ungültiger Kontext 0x0. Dies ist ein schwerwiegender Fehler. Diese Anwendung oder eine von ihr verwendete Bibliothek verwendet einen ungültigen Kontext und trägt dadurch zu einer allgemeinen Verschlechterung der Systemstabilität und -zuverlässigkeit bei. Dieser Hinweis ist eine Höflichkeit: Bitte beheben Sie dieses Problem. Bei einem bevorstehenden Update wird dies zu einem schwerwiegenden Fehler.
: CGContextRestoreGState: Ungültiger Kontext 0x0. Dies ist ein schwerwiegender Fehler. Diese Anwendung oder eine von ihr verwendete Bibliothek verwendet einen ungültigen Kontext und trägt dadurch zu einer allgemeinen Verschlechterung der Systemstabilität und -zuverlässigkeit bei. Dieser Hinweis ist eine Höflichkeit: Bitte beheben Sie dieses Problem. Bei einem bevorstehenden Update wird dies zu einem schwerwiegenden Fehler.
: CGContextGetBlendMode: Ungültiger Kontext 0x0. Dies ist ein schwerwiegender Fehler. Diese Anwendung oder eine von ihr verwendete Bibliothek verwendet einen ungültigen Kontext und trägt dadurch zu einer allgemeinen Verschlechterung der Systemstabilität und -zuverlässigkeit bei. Dieser Hinweis ist eine Höflichkeit: Bitte beheben Sie dieses Problem. Bei einem bevorstehenden Update wird dies zu einem schwerwiegenden Fehler.
Diese Fehler können auftreten, wenn eine benutzerdefinierte Ansicht oder eine ihrer geerbten Klassen angezeigt wird. Zu diesem Zeitpunkt erscheinen sie mehrmals, bis die Tastatur keine Eingabe mehr liefert. Berührungsereignisse werden weiterhin registriert, das System verlangsamt sich jedoch und kann schließlich zu nicht zugewiesenen Objektfehlern führen.
EDIT # 1: Ich habe Zugriff auf das zu importierende Framework, sehe aber in den Klassen, die das Problem verursachen, nichts Seltsames.
EDIT # 2: Ich habe gerade eine E-Mail erhalten, dass iOS 7.1 für Entwickler freigegeben wurde. Ich bin gespannt, ob dies verschwindet oder schlimmer wird oder gelöst werden kann.
Antworten:
Andere werden Sie bitten, den Code zu veröffentlichen, in dem Sie auf einen zentralen Grafikkontext zugreifen, aber ich bezweifle, dass dies das Problem ist. Diese ungültigen Kontext-0x0-Fehlermeldungen sind häufig und in iOS 7 leicht zu reproduzieren. Tatsächlich kann ich den Fehler mithilfe eines Storyboards mit Null-Code reproduzieren. Ich ziehe ein UITextField auf die Leinwand in IB, starte die App und tippe zweimal in das Textfeld.
In vielen Situationen fällt es mir schwer, die ungültigen Kontext-0x0-Fehlermeldungen ernst zu nehmen. Ich weiß nicht, ob Ihre Situation größere Bedenken erfordert (ich stimme Rob Napier zu, dass es sich lohnt, dies zu untersuchen, insbesondere wenn Sie explizit einen Grafikkontext verwenden).
In meinen eigenen Projekten hoffe ich, dass viele dieser Fehler eines Tages auf magische Weise verschwinden (aber dieser Tag kam nicht mit 7.0.3).
Update: Nach der Installation von Xcode 5.1 und dem Targeting von iOS 7.1 kann ich den Fehler nicht mehr reproduzieren, indem ich zweimal in ein leeres Textfeld tippe.
quelle
Wenn Sie neugierig sind , was Code wird diese Protokolle verursacht, können Sie einen symbolischen Breakpoint hinzufügen auf
CGPostError
.quelle
Diese Art von Fehlern ist historisch gesehen das Ergebnis des Aufrufs von Core Graphics-Funktionen, wenn sie sich nicht in einem Kontext befinden, der innerhalb
drawRect
oder zwischen Aufrufen wieUIGraphicsBeginImageContext
undUIGraphicsEndImageContext
(oder anderen UIKit-Funktionen wie denen, die einen Kontext beginnen und beenden) hergestellt wird.Allerdings ist bilobatum richtig, dass diese bestimmte Fehlerfolge auf den Fehler in iOS 7 zurückzuführen sein kann, auf den er in seiner Antwort verweist. Wenn diese Fehler in Ihren iOS6-Zielen nicht angezeigt werden oder wenn Sie nach einem kurzen Scan dieses privaten Frameworks keine verdächtigen Core Graphics-Aufrufe finden, liegt möglicherweise nur dieser iOS 7-Fehler vor. Guter Fang, Bilobatum!
quelle
Stellen Sie sicher, dass size.width oder size.height nicht 0 ist.
Sie können CGPostError einen Symbol-Haltepunkt hinzufügen, um dies zu überprüfen
quelle
Ich hatte dieses Problem mit einem einfachen UITextField (Tastatur wird nicht angezeigt und viele verschiedene ungültige Kontextfehlermeldungen auf der Konsole). Ich finde nur eine Problemumgehung, indem ich auf ein anderes Problem in SO schaue : Kann keine ausführbare Datei für CFBundle CertUIFramework.axbundle finden
Mach einfach:
Das Problem sollte nicht mehr da sein
quelle
In meinem Fall habe ich diese Fehler in diesem Code:
Nach einigen Gedanken und Tests erkenne ich das Problem - es war dieser Anruf:
Wie ich feststelle - in meinem Code ist dieser Aufruf nicht erforderlich, da das Befüllen auf andere Weise erfolgt - entferne ich ihn einfach.
quelle
Ich hatte das gleiche Problem und habe vergessen, QuartzCore / QuartzCore.h zu importieren. Dies hat mein Problem mit diesen Fehlern behoben.
quelle
Klare Antwort: Das Problem ist, dass Sie Core-Grafikelemente wie CGContext usw. in anderen als verwendet haben
- (void)drawRect:(CGRect)rect
dieser Methode verwendet haben.Verschieben Sie nun bitte Ihren Code auf diese Methode. Und es wird Ihnen Warnungen / Fehler geben.
quelle
Ich habe diesen Fehler erhalten, weil ich ein UIColor-Objekt als Attribut in einem NSAttributedString-Wörterbuch verwendet habe, das in einem CATextLayer-Objekt verwendet wurde. Ich habe das Wörterbuch so geändert, dass es ein CGColorRef enthält, und der Fehler ist verschwunden.
quelle
Ich hatte Fälle, in denen der zurückgegebene Kontext
UIGraphicsGetCurrentContext()
lautetNULL
, und wenn Sie versuchen, ihn für irgendetwas zu verwenden, wird diese Meldung angezeigt. Es liegt in der Verantwortung der Ansicht, einen KontextUIGraphicsPushContext
vor dem Aufruf zu pushendrawRect:
, wenn SiedrawRect:
direkt anrufen, anstatt[view setNeedsDisplay]
das Risiko einzugehen , dass der Kontext noch nicht festgelegt wurde. Meine Vermutung ist, dass vor iOS 7 der Kontext für die Ansicht verschobeninit
wurde und jetzt unter iOS 7 der Kontext erst verschoben wird, wenn das erste MaldrawRect:
aufgerufen wird. Ich vermute, dass ein UIKit-CodedrawRect:
direkt aufgerufen wird, und aus diesem Grund gibt es Probleme mit einem Code, auch wenn keine benutzerdefinierte Zeichnung erstellt wird.Lösungen (beim benutzerdefinierten Zeichnen):
drawRect:
direkt an, verwenden Sie[view setNeedsDisplay]
oder wenn Sie sofort zeichnen möchten[view.layer draw]
drawRect:
erhalten Sie den Kontext, aber verwenden Sie ihn nicht außerhalb des Körpers dieser if-Anweisungif (context) {<do drawing here>}
quelle
Wenn Sie das automatische Layout in der betroffenen Ansicht deaktivieren, wird dieser Fehler in einigen Fällen behoben, in denen Sie Benutzeroberflächenelemente (insbesondere benutzerdefinierte Elemente, die programmgesteuert gezeichnet werden) in einer Ansicht platzieren und verschieben. Ich habe JVFloatLabeledTextField verwendet, als ich dieses Symptom entdeckte.
quelle
In einigen Fällen müssen Sie möglicherweise die Zeile einfügen
#import <QuartzCore/QuartzCore.h>
.quelle
Ich habe diesen Fehler in der drawInContext (..) -Methode meiner benutzerdefinierten CALayer-Implementierung erhalten. UIBezierPath versucht, den UIGraphicsGetCurrentContext () zu verwenden, der in einer benutzerdefinierten Ebene standardmäßig Null ist. Die Online-Dokumentation erklärt dies sehr deutlich -
Hier ist der Code, der endlich mit meinen Kommentaren inline funktioniert hat (Swift-Code, aber die Lösung ist trotzdem dieselbe)
quelle
In meinem Fall hatte ich diese Warnung, als ich ein veränderbares Bild mit Kappeneinsätzen erstellte. Das Problem war, dass ich nicht mindestens 1 Pixel im "nicht abgedeckten" Bereich belassen habe.
quelle
Ich habe UIImage aus dem Kontext mit dem folgenden Code erstellt:
So bekam ich den Fehler.
Also habe ich den Inhalt der abgeleiteten Daten entfernt und meinen XCode neu gestartet. Und es hat funktioniert.
quelle
Ich habe das gleiche Problem. In meinem Projekt habe ich versucht, ein Textfeld zu erstellen und es meiner PDF-Datei hinzuzufügen. Alter Code:
Nachdem dieses Problem behoben wurde, wurde der Code geändert:
Ich habe festgestellt, dass die Lösung bei UIColor SetFill nicht funktioniert . Und danke dem Helfer.
quelle
Ich habe den Fehler mit dem Code bekommen
und nach dem Entfernen des Codes
Die Welt wurde still
quelle
Für mich war die Antwort, dass ich den Grafikkontext in unnötig freigegeben habe
drawRect:
. Das Setzen eines symbolischen Haltepunkts auf CGPostError hat mich auf den Täter hingewiesen.quelle
Habe diesen Fehler wie ich eingestellt hatte
Ohne eine der Delegatenroutinen zu implementieren. Das Entfernen dieser Zeile löste das Problem für mich
quelle
Ich hatte dieses Problem in einem UITextField, als ich die Berührung über ein leeres Feld mit nur Platzhaltertext hielt. Ich habe die folgende Problemumgehung verwendet, um leere Felder zu entfernen:
quelle
Bei mir wurde dieser Fehler angezeigt, weil ich das CGContextRef wie unten gezeigt freigegeben habe:
Durch Entfernen der Version wurde das Problem behoben
quelle
Ich habe es erhalten, als ich den Bildnamen in der activityImage-Methode in der UIActivity-Unterklasse falsch eingegeben habe
Die Eingabe des richtigen Bildes hat es für mich gelöst.
quelle
Deinstallieren Sie die App vom Simulator und führen Sie sie erneut aus
quelle
Wie andere, die hier kommentiert haben, erhielt ich diese Warnung, als ich eine der folgenden Aktionen ausführte:
In einem leeren Textfeld: Doppeltippen, Berühren und Halten, langes einfaches Tippen.
Dies scheint nur iOS 7.0.3 zu betreffen
Ich habe eine Problemumgehung festgestellt. Die Warnung wird nicht ausgelöst, wenn Ihr Pasteboard nicht NULL ist.
Also habe ich in textFieldDidBeginEditing Folgendes getan:
Ich habe dies im Simulator für iOS 7.0.3 auf dem iPhone 4s, 5 und 5s getestet und erhalte keine Warnung mehr. Ich habe dies auch im Simulator für iOS 8 auf dem iPhone 6 und 6 plus getestet, aber ich glaube nicht, dass iOS 8 betroffen ist.
Ich war zwei Tage lang frustriert, bevor ich diese Arbeit entdeckte, und hoffe, dass meine Antwort denjenigen von Ihnen hilft, die das gleiche Problem haben.
quelle
Wenn der Fehler auftritt, wenn Sie UIBezierPath verwenden und die Farbe für Strich oder Füllung festlegen, setzen Sie den festgelegten Farbcode in die Funktion drawRect und nicht an anderen Stellen.
quelle
Das ist hacky, aber es hat bei mir funktioniert.
Ich richte das
UIImageView
in denUITableViewCell
eininit
, gebe ihm eine Größe und Einschränkungen.Dann
cellForRowAtIndexPath
mache ich in meinen View Controllern Folgendes:Und das vermeidet den Fehler, dann stelle ich darunter in der Funktion das eigentliche Bild dafür ein
UIImageView
. Der obige Code ist eine gute Standardeinstellungquelle