当我使用普通alloc
和initWithObjects
制作一个NSArray时,索引为[0]的对象是一个字符串,一切正常。但是,如果第一个对象是int
,那么:
NSArray *anotherArrayObject = [[NSArray alloc]initWithObjects: 5 , 6 , 3 , 1 ,@"3412817", nil];
我收到一个错误(“将指针转换为不兼容的整数发送'int'到'id'类型的参数”)和一个警告(“ARC禁止将'int'隐式转换为'id'”)。
对此有何修复?
答案 0 :(得分:2)
NSArray只能包含Objective-C对象(例如NSObject
及其子类*的实例),而不是 int (或 long )等C基本类型, char * 等)。您将需要装箱或“集装箱”#34;你的价值观。
例如:
[ [ NSArray alloc ] initWithObjects:[ NSNumber numberWithInt:5 ], nil ] ;
或者,使用NSNumber文字表达式的相同代码:
[[NSArray alloc] initWithObjects:@5, nil]
答案 1 :(得分:1)
NSArray
只能包含对象,因此int
需要转换为NSNumber
才能包含在NSArray
中。
更新问题陈述:
NSArray *anotherArrayObject = @[ @5, @6, @3, @1, @"3412817" ];
以下是将int
转换为NSNumber
并将其放入NSArray
的示例。
使用NSNumber
文字语法:
NSArray *a = @[@5];
NSArray *b = @[@5, @6];
代替更详细的:
NSArray *a = [[NSArray alloc] initWithObjects:@5, nil];
如果您有int
变量:
int i = 3;
NSArray *a = @[@(i)];
为了恢复int
:
int i = [a[0] intValue];