incompatible puntero a entero conversión de asignar a los ‘NSInteger’ (aka ‘int’)

El uso de un UISegmentedControl, estoy recibiendo el error se sugiere en el Título de la última línea de este código.

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

La declaración de speed es NSInteger speed;.

Puede ayudar con la cuestión que se planteó, por favor?

[speeds objectAtIndex:[sender selectedSegmentIndex]] es NSNumber*.

OriginalEl autor zerowords | 2013-06-22

2 Kommentare

  1. 14

    Estás asignando un NSNumber * a un NSInteger.

    Tenga en cuenta que NSArrays de la tienda de objetos y que @1.25 es una abreviación de [NSNumber numberWithFloat:1.25]

    Cambiar a

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

    o con una mejor sintaxis

    speed = speeds[sender.selectedSegmentIndex].integerValue;

    También creo que lo que quiere es speed a ser un float, en lugar de un NSInteger. Usted no puede asignar 1.25, por ejemplo, a un NSInteger.

    OriginalEl autor Gabriele Petronella

  2. 3

    El problema aquí es que objectAtIndex: devuelve un id, que no puede ser asignado a un int, porque @32 devolvería un NSNumber, que es un objetivo-c tipo. El uso de este

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

    o floatValue, dependiendo de lo que usted necesita.

    OriginalEl autor Chris Loonam

Kommentieren Sie den Artikel

Bitte geben Sie Ihren Kommentar ein!
Bitte geben Sie hier Ihren Namen ein

Pruebas en línea