2011-01-25 13 views
5

Jak:Jak porównaj NSNumber w if

if (myNSNumber == 1) 
{ 
... 
} 

To nie wydaje się budować

Obiekt:

+1

Tytuł wydaje się niewłaściwy. Test NSInteger zostanie skompilowany, myślę, że masz na myśli NSNumber. – jv42

+0

OK masz rację my apoligies – TheLearner

Odpowiedz

16

Jeśli myNSNUmber jest NSNumber, kod powinien przeczytać,

if ([myNSNumber intValue] == 1) { 
    ... 
} 

If to jest NSInteger, możesz bezpośrednio porównać go z literałem całkowitym. Ponieważ NSInteger jest pierwotnym typem danych.

if (myNSNumber == 1) { 
    ... 
} 

Uwaga: Upewnij się, że nie mają * w swoim oświadczeniu. Twoje deklaracje NSInteger powinien przeczytać,

NSInteger myNSNUmber; // RIGHT 
NSInteger *myNSNUmber; // WRONG, NSInteger is not a struct, but it is a primitive data type. 

Poniżej na podstawie użytkownika @ BoltClock odpowiedź, którą niedawno pisał here


Jednak jeśli trzeba użyć wskaźnika do NSInteger (czyli NSInteger *) z jakiegoś powodu, to trzeba do nieprawidłowego wskaźnika, aby uzyskać wartość:

if (*myNSNUmber == 11) { 
} 

+0

NSNumber jest strukturą, więc nie możesz jej porównać do liczby całkowitej. To, co napisał Simon, jest poprawne. –

+0

intValue nie działa - otrzymuję nieprawidłowy błąd odbiornika – TheLearner

+0

'myNSNumber' to NSInteger lub' NSNumber'? Jeśli to "NSInteger", upewnij się, że nie masz "*" w deklaracji. – EmptyStack

3

NSInteger jest zazwyczaj zwykły int typ więc kod powinien dobrze pracować.

jeśli myNSNumber obiekt NSNumber (jako zmienna nazwa wskazuje), to należy wyodrębnić wartość int:

if ([myNSNumber intValue] == 1) 
{ 
... 
}