Incompatible pointer to integer conversion assigning 'NSInteger' (aka 'int')

Using UISegmentedControl, I get the error suggested in the header for the last line of this code.

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

The announcement for speed is NSInteger speed; .

Help with the raised problem, please?

+4
source share
2 answers

Assign NSNumber * to NSInteger .

Keep in mind that NSArray store objects and that @1.25 is short for [NSNumber numberWithFloat:1.25]

Change it to

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

or with stronger syntax

 speed = speeds[sender.selectedSegmentIndex].integerValue; 

Also I think you want speed be a float instead of an NSInteger . You cannot assign 1.25, for example, to NSInteger .

+13
source

The problem is that objectAtIndex: returns an id that cannot be assigned int , because @32 returns NSNumber , which is an objective-c type. Use it

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

or floatValue , depending on what you need.

+3
source

Source: https://habr.com/ru/post/1487630/


All Articles