2012-04-01 17 views
8

estoy bucle a través de un objeto NSString llamados previouslyDefinedNSString y verificar si el entero que representa el valor ASCII de una carta está en una NSMutableSet llama mySetOfLettersASCIIValues, que había poblado previamente con NSIntegers:¿Por qué obtengo un número entero de error de conversión de puntero en objetivo-c?

NSInteger ASCIIValueOfLetter; 

    for (int i; i < [previouslyDefinedNSString length]; i++) { 

     ASCIIValueOfLetter = [previouslyDefinedNSString characterAtIndex:i]; 

     // if character ASCII value is in set, perform some more actions... 
     if ([mySetOfLettersASCIIValues member: ASCIIValueOfLetter]) 

Sin embargo, yo estoy haciendo este error dentro de la condición de la declaración IF.

Incompatible integer to pointer conversion sending 'NSInteger' (aka 'int') to parameter of type 'id'; 
Implicit conversion of 'NSInteger' (aka 'int') to 'id' is disallowed with ARC 

¿Qué significan estos errores? ¿Cómo me convierto en un tipo de objeto (qué ID representa, ¿verdad?)? ¿No es NSInteger un objeto?

+0

'member:' presumiblemente espera un 'id'. Le estás dando un número entero. –

+1

Bien, entonces el problema aquí es que un conjunto debe contener objetos object-c y no valores escalares como NSInteger. – lnafziger

+0

Comprobar: for (int i = 0; ... – Gargo

Respuesta

19

Usted quiere que sea una NSNumber, como en:

NSInteger ASCIIValueOfLetter; 

    for (int i; i < [previouslyDefinedNSString length]; i++) { 

     ASCIIValueOfLetter = [previouslyDefinedNSString characterAtIndex:i]; 

     // if character ASCII value is in set, perform some more actions... 
     if ([mySetOfLettersASCIIValues member: [NSNumber numberWithInteger: ASCIIValueOfLetter]]) 

Ahora vamos a tener el resultado que busca.

+1

Qué extraño ... mi solución fue initWithStyle: [NSNumber numberWithInteger: UITableViewCellStyleDefault], en lugar de initWithStyle: UITableViewCellStyleDefault – Morkrom

11

Estos errores significan que member: espera un objeto. id es un puntero a un objeto Objective-C, y en lugar de un objeto, está pasando en un tipo primitivo o escalar (a pesar de su prefijo NS-, no es un objeto, solo un typedef en un valor primitivo, y en su caso, un int). Lo que debe hacer es ajustar ese valor escalar en un objeto, y específicamente, NSNumber, que es una clase específicamente diseñada para manejar esto.

En lugar de llamar al member: con , necesita llamarlo con el valor envuelto, [NSNumber numberWithInteger:ASCIIValueOfLetter], como mencionó Maurício.

+2

+1 explica todo el trato. –

Cuestiones relacionadas