2013-02-27 11 views
8

Tak więc jestem nowy w Xcode, pracuję nad projektem iOS i mam sporo czasu z najbardziej podstawowym debugowaniem. W szczególności muszę być w stanie zobaczyć stan obiektów, jak krok po kroku kodu (to nie jest szalone?), Ale nie mogę do życia mnie dowiedzieć się, jak to zrobić w Xcode.Zobacz stan obiektu/właściwości w Xcode podczas debugowania

Ilekroć próbuję, wydaje mi się, że najdalej dostaję adres pamięci, którego nie można rozszerzyć, aby pokazać jego obiektywną zawartość. Nie mogę też znaleźć sposobu, aby nawet ręcznie usunąć zaznaczenie wskaźnika w konsoli debugowania, aby wyświetlić stan tego obiektu.

Tutaj próbuję wyświetlić zawartość tablicy store.storeHours, bez powodzenia. W rzeczywistości widok po lewej stronie mówi mi, że w tablicy znajduje się 0 obiektów i nic nie pokażę, gdy spróbuję ją rozwinąć, ale kiedy mam po store.storeHours, konsola pokazuje 7 obiektów, choć bezużytecznie przedstawianych jako adresy pamięci.

enter image description here

Proszę mi powiedzieć, że nie jestem szalony, a ja po prostu czegoś brakuje!

Aktualizacja: Rzeczy stają się jeszcze dziwniejsze! Kiedy nagle zmienię wyświetlanie na "Lokalne" zamiast "Auto", self.store.storeHours stanie się w pełni nawigacyjny! Zastanawiam się, czy może wystąpił błąd w uzyskiwaniu dostępu do poprawnej instancji "storeHours" lub czegoś podobnego, ponieważ wyraźnie rozpoznaje 7 obiektów w tablicy, kiedy ją teraz oglądam! Nie wspominając już o tym, że obiekty są rozszerzalne, tak jak początkowo miałem nadzieję.

enter image description here

+0

'Godziny' to Twoja niestandardowa klasa? –

+0

Tak ............ – devios1

Odpowiedz

8

Przypadki są faktycznie zapewnienie, że informacje siebie. Musisz zastosować metodę description, która jest dziedziczona po NSObject, dla twoich klas niestandardowych, aby mogły drukować się jako coś innego niż adres pamięci (co robi implementacja NSObject).

Nie mam pojęcia, jakie właściwości klasa Hours ma, ale jest to tak proste, jak coś takiego:

- (NSString *)description 
{ 
    return [NSString stringWithFormat:@"Open: %i Close: %i", self.openTime, self.closeTime]; 
} 

Sposób prostu musi zwracać NSString zawierający wszelkie informacje uważasz za ważne, aby zobaczyć, kiedy kontrola obiektu.

W ten sposób klasy reprezentują się również podczas korzystania ze specyfikatora formatu %@ w NSLog().

+0

Ok to zdecydowanie początek. Mogę przynajmniej zobaczyć, jakie są teraz obiekty Godziny.To niefortunne, że domyślna implementacja NSObject nie może rekurencyjnie pokazać właściwości i wartości w sposób ogólny. Przypuszczam, że Obj-C jest zbyt niski dla tego rodzaju rzeczy. – devios1

+1

W bibliotece uruchomieniowej dostępne są funkcje introspekcji, więc w rzeczywistości obiekt może po prostu wypluć wszystkie jego właściwości, bez względu na to, czym są: http://www.google.com/search?q=site:stackoverflow.com+ -site: meta.stackoverflow.com + object-c + print + all + properties + obiektu + an + –

+2

@chaiguy spójrz na tą super użyteczną odpowiedź od kendall-helmstetter-gelner na temat właściwej introspekcji (czyli tego, kim jesteś pytać o); http://stackoverflow.com/a/2304797/91282 – Till

0

wdrożyć

-(NSString*)description{ 
    //Return a string in whatever way you like to describe this instance. That is what xcode debugger reads. 
    //This is implemented in the parent to return the address, that's why you see that way. 
} 
+1

Czy możesz nieco rozwinąć tę odpowiedź? – thomasrutter

1

W przykładzie store.storeHours jest pusty NSArray. Więc, naturalnie, nie możesz zajrzeć do środka.

Dla większej jasności w debugger, spróbuj dodać metodę (dziedziczona z NSObject)

- (NSString*) description 

do swoich obiektów jak Hours który mówi więcej o ich zawartości. Zobacz także debugDescription.

+0

Zobacz też to, co też bym pomyślał, ale to * nie * jest puste, a podczas debugowania pętla for..in iteruje ponad 7 obiektów, ale nie widzę 7 obiektów, chyba że jawnie "po" storeHours w konsoli. Bardzo mylące. – devios1

+0

Czy masz najnowszą wersję Xcode, @chaiguy? LLDB był początkowo nieco błędny w odniesieniu do oglądania ivarów. –

+0

Myślę, że to ostatnie (4.5.2 (4G2008a)). Konsola mówi (gdb), choć prawdopodobnie oznacza to, że nie używam LLDB? – devios1

Powiązane problemy