2013-06-01 1 views
1

Любая идея, как заставить это предупреждение уйти. Код работает нормально, мне просто не нравятся предупреждения в моем проекте. Я никогда не сталкивался с этим предупреждением, так что я делаю гору из кротового холма, я думаю. Синтаксис бокса? Это относится к квадратным скобкам? Это предупреждение появляется при попытке модернизировать старый проект в Objective-C с помощью Xcode.Предупреждение: Преобразование в бокс Синтаксис требует от «длинного» до «int»

for (int i = 0; i <= 6; i++) { 

    [sequence addObject:[NSNumber numberWithInt:random()% 6]]; 

} 

Он выдает ошибку о том:

Преобразования синтаксиса бокса требует литью «длинного» до «межд»

enter image description here

ответ

1

«Бокс» относится к новому синтаксису бокса C выражения, например

NSNumber *n = @(2*3+4) 

вместо

NSNumber *n = [NSNumber numberWithInt:(2*3+4)]; 

(см http://clang.llvm.org/docs/ObjectiveCLiterals.html для подробностей).

В вашем случае,

[NSNumber numberWithInt:random()% 6] 

создает объект номер, содержащий int, но

@(random()% 6) 

бы создать объект номер, содержащий long, потому что random() объявлен как

long random(void); 

Итак, чтобы получить exac ждении такое же поведение, как и до преобразования, вы должны написать

[NSNumber numberWithInt:(int)(random()% 6)] 

, который затем преобразуется в

@((int)(random()% 6)) 

Если вы не заботитесь, который «аромат» объекта номер вы получите, то просто преобразовать эту строку вручную

[sequence addObject:@(random()% 6)]; 

но Xcode не может решить, что для вас.

+0

спасибо человеку, это имеет смысл. На самом деле я должен был осознать это сам, так как я был в процессе преобразования линии в модернизированный Objective-C. У меня нет оправданий для себя. Может, длинный день? Еще раз спасибо. – I00I

+0

@ I00I: Добро пожаловать! –