2015-09-09 25 views
40

Mam problem po skompilowaniu kodu z Xcode 7 GM.CGContextSaveGState: niepoprawny kontekst 0x0 (Xcode 7 GM)

Według Apple jest to błąd, ale nadal wydaje się być problem. Wszystko działa dobrze, ale czy można pozbyć się tych błędów?

: CGContextSaveGState: nieprawidłowy kontekst 0x0. Jeśli chcesz zobaczyć ślad wstecz, ustaw zmienną środowiskową CG_CONTEXT_SHOW_BACKTRACE.

: CGContextTranslateCTM: niepoprawny kontekst 0x0. Jeśli chcesz zobaczyć ślad wstecz, ustaw zmienną środowiskową CG_CONTEXT_SHOW_BACKTRACE.

: CGContextRestoreGState: nieprawidłowy kontekst 0x0. Jeśli chcesz zobaczyć ślad wstecz, ustaw zmienną środowiskową CG_CONTEXT_SHOW_BACKTRACE.

enter image description here

Ktoś na innych forach powiedział coś o pasku stanu, ale nie mam żadnych sukcesów, aby wyeliminować ten komunikat. To nie jest duży problem, ale jest to bezużyteczny "błąd". Używam Kreatora interfejsu.

Aktualizacja: Kiedyś Objective-C jeśli używasz Swift maybe this is the question you're looking for

+0

Możliwe duplikat [CGContextSaveGState: nieprawidłowy kontekst 0x0 błędów tylko w urządzeniu] (http://stackoverflow.com/questions/32236204/cgcontextsavegstate-invalid-context-0x0-error-only-on-device) –

Odpowiedz

55

Dzieje się tak również dla mnie w dniu 7 GM, ale usunięcie UIViewControllerBasedStatusBarAppearance z Info.plist stałe to dla mnie, jak powiedział here.

Aktualizacja: Ostrzeżenie wydaje się być poszedł z iOS 9.2

+6

Hi Ernesto twoje rozwiązanie również działało dla mnie, ale co jeśli chcę, aby pasek UIStatusbar pozostał biały? Czy znalazłeś jakieś rozwiązanie, aby pasek stanu pozostawał biały bez tych błędów? –

+0

Cześć, nie wiem, co masz na myśli mówiąc "biały", ale usunięcie "UIViewControllerBasedStatusBarAppearance" oznacza, że ​​wygląd paska stanu jest teraz określany na podstawie widocznego kontrolera widoku, musisz zaimplementować ['preferredStatusBarStyle'] (https) : //developer.apple.com/library/ios/documentation/UIKit/Reference/UIViewController_Class/index.html#//apple_ref/occ/instm/UIViewController/preferredStatusBarStyle) tam i zwraca żądaną wartość. Zwróć uwagę, że jeśli kontroler widoku treści jest osadzony w kontrolerze nawigacyjnym/karcie, musisz go zaimplementować w drugim. – ernesto

+1

Działa to tylko wtedy, gdy włączony jest automatyczny układ. Jeśli masz go wyłączony i nie można użyć UIViewControllerBasedStatusBarAppearance, to prawie nie można zmienić tekstu paska stanu na światło. –

7

Znalazłem inną przyczynę tego błędu dzisiaj.

Kiedy napisałem kod rysunkowy w mojej klasie kontrolera View, pojawiły się te błędy. Zdałem sobie sprawę, że muszę utworzyć podklasę UIView i wykonać kroki rysowania w funkcji overRide drawRect. Kiedy przeniosłem tam kod rysunku, zniknęły wszystkie błędy.

+0

Dude, którego właśnie uratowałeś! Dziękuję Ci! Trzeba tylko powiedzieć, że w Swift 4.0 to remis (_ rect: CGRect) musi zostać przesłonięty. –

2

Jest to dobry przykład użycia debuggera. Ustawiłem punkt przerwania w moim main, a następnie użyłem klawisza F7, aby przejść przez kod, aż pojawiło się ostrzeżenie. Okazuje się, że istnieje jeszcze inny sposób pojawia się ten fałszywy błąd:

NSColor *myColor = colorFromRGBA(43,51,59,0.95); 
[myColor set]; 
(self.window).backgroundColor = myColor; 

Został generowania ostrzeżenia na [myColor set]. Najwyraźniej nie potrzebowałem tego i skomentowałem to. W tym momencie błąd zniknął. Oczywiście twoje doświadczenie może się różnić.

+0

To był również mój problem, z wyjątkiem tego, że używałem [stroke stroke] na UIBezierPath. To kod, który generował dla mnie ten dziennik. –

-3

Uruchom ponownie urządzenie. Naprawił mój problem.

5

Rysuję użyciu UIBezierPath

Usuwanie path.fill() usuwane ostrzeżenie.

+0

Naprawiono dla mnie. Dzięki +1 – tobeiosdev