Chcę dodać obiekt do NSMutableArray:
NSLog(@"Object text: %@", object.text);
NSLog(@"Object: %@", object);
[appdelegate.objects addObject:object];
NSLog(@"Objects array size: %i", [appdelegate.objects count]);
To jest wynik:
Object text: This is the text
Object: <Object: 0x6e762c0>
Objects array size: 0
Jak to możliwe, dodaję obiekt, w następnym wierszu nadal jest pusty. Plik NSMutableArray
nie jest nil
, ponieważ spowodowałoby to wyjątek.
Czy ktoś zgaduje?
Odpowiedzi:
10 dla odpowiedzi № 1Nie stanowiłoby to wyjątku, gdyby tak było nil
. Nadal możesz wysłać wiadomość nil
obiektu, jeśli zwykle odpowiada na tę wiadomość. W tym przypadku otrzymasz po prostu 0. Myślę, że nie przydzielasz tablicy. Upewnij się, że robisz to:
array = [[NSMutableArray alloc] init];
Wskazówka dotycząca debugowania, jeśli nie masz pewności co do stanu obiektu i chcesz się upewnić, że obiekt rzeczywiście istnieje i jest gotowy do użycia, użyj assert(appdelegate.objects);
Jeśli tablica jest zerowa, twój kod przestanie działać w tym wierszu. Jeśli nie kończy się na tym wierszu, to wiesz, że obiekt istnieje w pamięci.
0 dla odpowiedzi nr 2
Twój NSMutableArray jest rzeczywiście prawie na pewno zerowy. Nie zgłosi wyjątku, ponieważ wysyła wiadomość do nil
w ObjC nie jest operacją i zachowywałby się tak, jak widzisz, ze zwracaną wartością równą zero lub nil
itp.
Spróbuj również to zarejestrować, aby sprawdzić dwukrotnie.