2012-09-05 23 views
7

chcę dodać obiekt do w NSMutableArray:NSMutableArray jest pusty po addObject

NSLog(@"Object text: %@", object.text); 
NSLog(@"Object: %@", object); 
[appdelegate.objects addObject:object]; 
NSLog(@"Objects array size: %i", [appdelegate.objects count]); 

To wyjście:

Object text: This is the text 
Object: <Object: 0x6e762c0> 
Objects array size: 0 

Jak to możliwe, dodaję obiektu, na następny linia, jest nadal pusta. Numer NSMutableArray nie jest nil, ponieważ spowodowałoby to wyjątek.

Ktoś zgaduje?

Odpowiedz

10

Nie zgłosi wyjątku, jeśli był to nil. Nadal możesz wysłać wiadomość do obiektu nil, jeśli zazwyczaj odpowiada na tę wiadomość. W tym przypadku dostaniesz 0. Myślę, że nie przydzielasz tablicy. Upewnij się, że robisz to:

array = [[NSMutableArray alloc] init]; 

Jako wskazówka debugowania, jeśli nie masz pewności co do stanu obiektu i chcesz upewnić się, że obiekt rzeczywiście istnieje i jest gotowa do użycia, należy assert(appdelegate.objects); Jeśli tablica jest zerowa, twój kod przestanie działać w tym wierszu. Jeśli nie zatrzymuje się w tym wierszu, to wiesz, że obiekt istnieje w pamięci.

+0

To było rzeczywiście puste. Użyto przykładu demo, który również nie przydzielił/zainicjował tablicy, ale był to działający przykład. Jak to mogło działać? – TomWebDev

+0

@TomWebDev hmm to nie może działać. To musiało zostać gdzieś przydzielone, może kod jest po prostu trudny do wykrycia. Czy masz link do przykładu? – Snowman

+0

Prawdopodobnie tablica została utworzona za pomocą arrayWithCapacity? Ponieważ wtedy nie znajdziesz żadnego przydziału tablicy. – NDY

0

Twoja NSMutableArray rzeczywiście prawie na pewno jest pusta. Nie spowoduje to wyjątku, ponieważ wysłanie dowolnej wiadomości do nil w ObjC jest operacją nieobsługiwaną i zachowywałoby się tak, jak widzisz, z wartością zwracaną równą zero lub nil, itp.

Spróbuj zarejestrować to również podwójnie sprawdzić.