Saya sedang mengerjakan beberapa latihan dan mendapat peringatan yang menyatakan:
Konversi implisit kehilangan presisi integer: 'NSUInteger' (alias 'unsigned long') menjadi 'int'
#import <Foundation/Foundation.h>
int main (int argc, const char * argv[])
{
@autoreleasepool {
NSArray *myColors;
int i;
int count;
myColors = @[@"Red", @"Green", @"Blue", @"Yellow"];
count = myColors.count; // <<< issue warning here
for (i = 0; i < count; i++)
NSLog (@"Element %i = %@", i, [myColors objectAtIndex: i]);
}
return 0;
}
Bertentangan dengan jawaban Martin, memilih ke int (atau mengabaikan peringatan) tidak selalu aman bahkan jika Anda tahu array Anda tidak memiliki lebih dari 2 ^ 31-1 elemen. Tidak ketika mengkompilasi untuk 64-bit.
Sebagai contoh:
sumber
indexOfObject:
akan menjadi ide yang buruk. Jawaban saya dimaksudkan untuk kode spesifik dalam pertanyaan, dancount
metode ini tidak dapat kembaliNSNotFound
. Saya tidak merekomendasikan untuk menggunakan int atau mengabaikan peringatan secara umum. Maaf kalau itu tidak jelas. Bahkan kode sampel Anda akan menghasilkan peringatanif (i == NSNotFound)
jika dikompilasi untuk 64-bit, sehingga masalahnya tidak akan luput dari perhatian.Ubah kunci dalam Proyek> Pengaturan Bangun " ketik panggilan cek ke printf / scanf : TIDAK "
Penjelasan: [Cara kerjanya]
Periksa panggilan ke printf dan scanf, dll., Untuk memastikan bahwa argumen yang diberikan memiliki tipe yang sesuai dengan format string yang ditentukan, dan bahwa konversi yang ditentukan dalam format string masuk akal.
Semoga berhasil
Peringatan lainnya
obyektif c konversi implisit kehilangan presisi integer 'NSUInteger' (alias 'unsigned long') menjadi 'int
Ubah kunci " konversi implisit ke Jenis 32bit> Debug> * 64 arsitektur: Tidak "
[ hati-hati: Ini dapat membatalkan peringatan lain konversi arsitektur 64 Bit] .
sumber
Melakukan casting expicit ke "int" memecahkan masalah dalam kasus saya. Saya memiliki masalah yang sama. Begitu:
sumber