Próbuję wyodrębnić ciąg (który zawiera liczbę całkowitą) z tablicy, a następnie użyć go jako int w funkcji. Próbuję przekonwertować go na int przy użyciu intValue.
Oto kod, który próbowałem.
NSArray *_returnedArguments = [serverOutput componentsSeparatedByString:@":"];
[_appDelegate loggedIn:usernameField.text:passwordField.text:(int)[[_returnedArguments objectAtIndex:2] intValue]];
Otrzymuję ten błąd:
przekazanie argumentu 3 „loggedIn :::” powoduje, że wskaźnik jest liczbą całkowitą bez rzutowania
Co jest nie tak?
iphone
objective-c
string
int
Christian Stewart
źródło
źródło
(int)
częściloggedIn:::
metoda, co jest zdecydowanie nie-Objective-C sposobem robienia rzeczy.loggedIn:::
. Reszta tej deklaracji to tylko nazwy parametrów, a nie część selektora. Idiomatycznie, tak powinno być- (void)loggedIn:(NSString *)tusername password:(NSString *)tpassword userID:(int)userId
. A potem nazwałbyś to jako[_appDelegate userIsLoggedIn:usernameField.text password:passwordField.text userID:[[_returnedArguments objectAtIndex:2] intValue]];
.Odpowiedzi:
Naprawdę nie wiem, co było tak trudne w tym pytaniu, ale udało mi się to zrobić w ten sposób:
[myStringContainingInt intValue];
Należy zauważyć, że możesz również:
myStringContainingInt.intValue;
źródło
[myStringContainingInt intValue];
można również napisać takmyStringContainingInt.intValue;
myStringContainingInt
jest zbyt duża, aby zmieścić się w 32 bitach - w rzeczywistości 31 bitów od czasu podpisu?-[NSString intValue]
nie zachowywać się dokładnie tak, jak tego oczekujesz. Z dokumentacji : ta właściwość ma wartość 0, jeśli ciąg nie zaczyna się od prawidłowej dziesiętnej reprezentacji liczby w postaci tekstu. Na przykład[@" 2 asdghjk" intValue]
zwróci2
.Możesz po prostu przekonwertować ciąg w ten sposób [str intValue] lub [str integerValue]
integerValue Zwraca wartość NSInteger tekstu odbiorcy.
więcej informacji znajdziesz tutaj
źródło
_returnedArguments
jest tablicą,NSStrings
którejUITextField text
oczekuje właściwość. Nie ma potrzeby konwersji.Błąd składni:
Jeśli Twoja _appDelegate ma
passwordField
właściwość, możesz ustawić tekst, korzystając z poniższegoźródło
passwordField.text
jest drugim argumentemloggedIn:::
metody i[[_returnedArguments objectAtIndex:2] intValue]
trzecim argumentem. Nic nie jest przekazywane do nieruchomości.Zasadniczo trzeci parametr w
loggedIn
nie powinien być liczbą całkowitą, powinien to być jakiś obiekt, ale nie możemy tego wiedzieć na pewno, ponieważ nie nadałeś nazwy parametrom w wywołaniu metody. Podaj podpis metody, abyśmy mogli się upewnić. Może to wymagaNSNumber
czegoś.źródło
int*
- w rzeczywistości wydaje mi się to całkiem prawdopodobne, ponieważ wiele osób piszących Objective-C bez poznania podstaw C zakłada, że typy parametrów zawierają tylko gwiazdy jako część swojej składni.Należy pamiętać, że użytkownicy międzynarodowi mogą używać separatora dziesiętnego innego niż wtedy,
.
gdy wartości mogą się pomieszać lub po prostu stać się zerowe, gdy są używaneintValue
w ciągu.Na przykład w Wielkiej Brytanii
1.23
jest napisane1,23
, więc liczba1.777
byłoby wejście przez użytkownika jak1,777
, co, jak.intValue
będzie1777
nie1
(skrócony).Zrobiłem makro, które konwertuje tekst wejściowy na numer NSNumber na podstawie argumentu ustawień regionalnych, który może być zerowy (jeśli nil używa bieżącego ustawienia regionalnego urządzenia).
źródło
Jeśli dobrze Cię zrozumiałem, musisz przekonwertować swój plik
NSString
naint
? Wypróbuj ten spokój kodu:źródło
intValue
metodę. developer.apple.com/iphone/library/documentation/cocoa/…