指向分配给“NSInteger”(又名“int”)的整数转换的不兼容指针

Posted

技术标签:

【中文标题】指向分配给“NSInteger”(又名“int”)的整数转换的不兼容指针【英文标题】:incompatible pointer to integer conversion assigning to 'NSInteger' (aka 'int') 【发布时间】:2013-06-22 15:07:20 【问题描述】:

使用 UISegmentedControl,我收到了标题中关于此代码最后一行的建议的错误。

- (IBAction)segmentAction:(id)sender

    //NSLog(@"segmentAction: selected segment = %d", [sender selectedSegmentIndex]);
    NSArray *speeds = @[@1.25, @1.5, @2.0];
    speed = [speeds objectAtIndex:[sender selectedSegmentIndex]];

speed 的声明是 NSInteger speed;

请您帮忙解决提出的问题吗?

【问题讨论】:

[speeds objectAtIndex:[sender selectedSegmentIndex]]NSNumber* 【参考方案1】:

您将NSNumber * 分配给NSInteger

请记住,NSArrays 存储对象,@1.25[NSNumber numberWithFloat:1.25] 的简写

改成

speed = [[speeds objectAtIndex:[sender selectedSegmentIndex]] integerValue];

或者使用更好的语法

speed = speeds[sender.selectedSegmentIndex].integerValue;

另外我认为你想要的是 speed 成为 float,而不是 NSInteger。例如,您不能将 1.25 分配给 NSInteger

【讨论】:

【参考方案2】:

这里的问题是objectAtIndex:返回一个id,它不能分配给int,因为@32会返回一个NSNumber,这是一个objective-c类型。使用这个

[[speeds objectAtIndex:[sender selectedSegmentIndex]] integerValue]

floatValue,取决于您的需要。

【讨论】:

以上是关于指向分配给“NSInteger”(又名“int”)的整数转换的不兼容指针的主要内容,如果未能解决你的问题,请参考以下文章

Nsinteger 可访问问题

不兼容的整数到指针的转换将“NSInteger”(又名“int”)发送到“NSInteger *”(又名“int *”)类型的参数

不兼容的指针类型将“NSString *”发送到“NSInteger *”类型的参数(又名“int *”)

将 const int 分配给指向 int 的 const 指针是非法的吗?

将 int[][] 分配给 int** [重复]

将指向原子类型的指针分配给指向非原子类型的指针