2013-04-05 19 views
6

Próbuję debugować problem działający pod iOS 5.1 i kiedy zatrzymuję się w debugerze wewnątrz kodu, który dostaje błąd i próbuję wydrukować coś za pomocą debuggera. wiadomość:"self" nie jest dostępny w debuggerze na iOS 5.1

error: warning: Stopped in a context claiming to capture an Objective-C object pointer, but 'self' isn't available; pretending we are in a generic context

Przepraszam? Czy ktoś wie, co tutaj zrobiłem?

Kod jest zbyt skomplikowany, aby ktokolwiek chciał go obejrzeć - mam nadzieję, że ktoś może mi powiedzieć, co oznacza komunikat debuggera.

Zdarzyło się to tylko z przerwami, ale teraz kończy się niepowodzeniem. Operacja na ogół (a może zawsze) działa po raz pierwszy, gdy wypróbowuję ją na iOS 5.1, czasami po raz pierwszy i najwyraźniej zawsze działa w iOS 6.

Jeśli pomaga poznać ogólny kontekst ... Próbuję dodać dobrze napisany obiekt do grupy ALAssetsGroup, więc jest to blok zakończenia w wątku innym niż UI. Mam rozsądny wygląd śledzenia stosu dla bloku ukończenia. Błąd polega na tym, że przechowywana grupa ALAssetsGroup nie ma już znaczącej wartości - lub tak twierdzi NSLog, która wie, że jest to obiekt ALAssetsGroup. Ta wartość jest przypisana w jednym miejscu (i rejestrowana, więc śledzę to) i widzę początkowe przypisanie za pomocą obserwacji klucz-wartość i nie widzę, aby kiedykolwiek było zmieniane w sposób KVO-sorta.

+0

Nie jesteś w pliku Objective-C++? Widziałem wiele tego rodzaju błędów w tym szalonym języku (jeden z wielu powodów, dla których ograniczam jego użycie). Inną rzeczą, którą należy sprawdzić, jest to, że nie debugujesz kompilacji wydania (gdzie niektóre ramki stosów mogą być zoptymalizowane). Tylko przypuszczenia. –

+0

Dzięki. Prosty Objective-C i konstrukcja debugowania, więc nie ma tam radości. –

+0

to może się zdarzyć, jeśli 'self' zostanie zoptymalizowany przez kompilator.możesz spróbować wydrukować '$ edi', jeśli debugujesz na symulatorze –

Odpowiedz

2

Jest to błąd debugger (Tak, wyobraź sobie!)

Wystarczy zrestartować XCode, a to nie powinno być problemem dla Ciebie już :)

EDIT:

Psyche ! Myślałem o czymś innym.

Tworzysz cykl zatrzymywania i od tej pory debugger klasyfikuje ten konkretny cykl zatrzymywania w ten sposób (jak już mówiłem, błąd).

Aby rozwiązać ten problem, należy utworzyć słaby egzemplarz self:

__weak __typeof(self)weakSelf = self;

Następnie za self która powoduje problemy:

Zmień self.object do weakSelf.object

+0

Może to być błąd, ale ponowne uruchomienie XCode nie powoduje zniknięcia. –

+0

Sprawdź moją edycję. – jakenberg

0

To się dzieje samo dla mnie z rozwojem Xcode 5 i iOS 6.1.

byłem kompilacji w Release trybie, jeśli ktoś ma ten problem jeszcze raz sprawdzić, czy kompilacji na Debug trybie.

4

W Ustawieniach kompilacji ustawiono dla mnie ustawienie Precompile Prefix Header na NO.

+0

Ten też zadziałał dla mnie. Dzięki – inigo333

Powiązane problemy