指向分配给“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
。
请记住,NSArray
s 存储对象,@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”(又名“int”)发送到“NSInteger *”(又名“int *”)类型的参数
不兼容的指针类型将“NSString *”发送到“NSInteger *”类型的参数(又名“int *”)