Saya mencoba mengekstrak string (yang berisi integer) dari array dan kemudian menggunakannya sebagai int dalam suatu fungsi. Saya mencoba mengubahnya menjadi int menggunakan intValue.
Ini kode yang saya coba.
NSArray *_returnedArguments = [serverOutput componentsSeparatedByString:@":"];
[_appDelegate loggedIn:usernameField.text:passwordField.text:(int)[[_returnedArguments objectAtIndex:2] intValue]];
Saya mendapatkan kesalahan ini:
melewatkan argumen 3 dari 'logsIn :::' membuat pointer dari integer tanpa cast
Apa yang salah?
iphone
objective-c
string
int
Christian Stewart
sumber
sumber
(int)
bagianloggedIn:::
metode Anda , yang jelas merupakan cara yang tidak Objective-C untuk melakukan sesuatu.loggedIn:::
. Sisa dari deklarasi itu hanyalah nama parameter, bukan bagian dari selector. Idiomatis, itu seharusnya- (void)loggedIn:(NSString *)tusername password:(NSString *)tpassword userID:(int)userId
. Dan kemudian Anda akan menyebutnya sebagai[_appDelegate userIsLoggedIn:usernameField.text password:passwordField.text userID:[[_returnedArguments objectAtIndex:2] intValue]];
.Jawaban:
Saya benar-benar tidak tahu apa yang sulit tentang pertanyaan ini, tetapi saya berhasil melakukannya dengan cara ini:
[myStringContainingInt intValue];
Perlu dicatat bahwa Anda juga dapat melakukan:
myStringContainingInt.intValue;
sumber
[myStringContainingInt intValue];
juga dapat ditulis sepertimyStringContainingInt.intValue;
myStringContainingInt
terlalu besar untuk muat di dalam 32 bit - sebenarnya 31 bit sejak ditandatangani?-[NSString intValue]
mungkin tidak berperilaku persis seperti yang Anda harapkan. Dari dokumen : Properti ini adalah 0 jika string tidak dimulai dengan representasi teks desimal yang valid dari sebuah angka. Misalnya,[@" 2 asdghjk" intValue]
akan kembali2
.Anda bisa mengonversi string seperti itu [str intValue] atau [str integerValue]
integerValue Mengembalikan nilai NSInteger teks penerima.
untuk informasi lebih lanjut lihat di sini
sumber
_returnedArguments
adalah larikNSStrings
yang diharapkanUITextField text
properti. Tidak perlu mengkonversi.Kesalahan sintaks:
Jika _appDelegate Anda memiliki
passwordField
properti, Anda dapat menyetel teks menggunakan yang berikut inisumber
passwordField.text
adalah argumen kedua untukloggedIn:::
metode dan[[_returnedArguments objectAtIndex:2] intValue]
merupakan argumen ketiga. Tidak ada yang dikirimkan ke properti.Pada dasarnya, parameter ketiga di
loggedIn
tidak boleh berupa bilangan bulat, harus berupa objek tertentu, tetapi kami tidak dapat mengetahui secara pasti karena Anda tidak menamai parameter dalam pemanggilan metode. Berikan tanda tangan metode sehingga kami dapat melihat dengan pasti. Mungkin itu membutuhkanNSNumber
atau sesuatu.sumber
int*
- pada kenyataannya, itu tampaknya sangat mungkin bagi saya, karena banyak orang yang menulis Objective-C tanpa mempelajari dasar-dasar C menganggap bahwa tipe parameter hanya menyertakan bintang sebagai bagian dari sintaks mereka.Perlu diingat bahwa pengguna internasional mungkin menggunakan pemisah desimal selain
.
dalam hal ini nilai dapat tercampur atau menjadi nol saat menggunakanintValue
pada string.Misalnya di Inggris
1.23
ditulis1,23
, jadi nomornya1.777
akan diinput oleh user as1,777
, yang mana, tidak.intValue
akan (dipotong).1777
1
Saya telah membuat makro yang akan mengubah teks input menjadi NSNumber berdasarkan argumen lokal yang bisa nihil (jika nihil menggunakan perangkat lokal saat ini).
sumber
Jika saya memahami Anda dengan benar, Anda perlu mengonversi
NSString
menjadiint
? Coba kode damai ini:sumber
intValue
metode. developer.apple.com/iphone/library/documentation/cocoa/…