Conversion de NSNumber en NSInteger
J'essaie de déterminer ce qu'est une valeur dans un tableau et ensuite mettre en œuvre des changements sur le tableau, mais je ne peux pas accéder au tableau en premier lieu...
NSNumber *row = [NSNumber numberWithInt:recognizer.view.tag];
NSInteger *newRow = [row integerValue];
NSInteger *index = [selectedItems indexOfObject:row];//0=Not selected 1=selected;
NSLog(@"%@ & ",row);
if (index == 0) {
[selectedItems removeObjectAtIndex:newRow];
[selectedItems insertObject:@"1" atIndex: newRow];
[(UITableViewCell *)(recognizer.view) setAccessoryType:UITableViewCellAccessoryCheckmark];
} else {
[selectedItems removeObjectAtIndex: newRow];
[selectedItems insertObject:@"0" atIndex: newRow];;
[(UITableViewCell *)(recognizer.view) setAccessoryType:UITableViewCellAccessoryNone];
}
Comme vous pouvez le voir je suis en train d'essayer d'obtenir des informations à partir de la ligne de la variable, qui est un NSNumber et de trouver la valeur du tableau à l'indice variable. Aussi, j'ai déclaré dans mon onload()...
selectedItems = [NSArray arrayWithObjects: 0, 0, 0, nil];
Le problème est que je reçois toutes ces mises en garde en disant...
Incompatible integer to pointer conversion initializing 'NSInteger *' (aka 'int *') with an expression of type 'NSUInteger' (aka 'unsigned int');
Chaque fois que j'utilise les varaibles ligne ou newRow. Comme vous pouvez le voir newRow est juste la ligne comme un entier. Ce que je fais mal?
source d'informationauteur The Man
Vous devez vous connecter pour publier un commentaire.
NSInteger est juste un typedef pour
int
il n'est donc pas un type d'objet, c'est un scalaire, vous n'avez pas à déclarer comme un type de pointeur. Utilisationà la place.
NSInteger est un primitif, pas un type d'objet. Collections telles que les tableaux ne peut contenir que des objets, tels que des NSNumber.
Vous pouvez obtenir la valeur primitive d'une NSNumber en utilisant des méthodes telles un
-integerValue
. Notez que vous n'avez pas l'habitude souhaitez faire un NSInteger pointeur (NSInteger*), vous voulez juste avoir un NSInteger.Il n'y a également aucun intérêt à prendre
recognizer.view.tag
faire un NSNumber, puis de l'appel d'-integerValue
sur que NSNumber. Utilisez simplementrecognizer.view.tag
directement la valeur de l'entier. (Vous pouvez toujours affecter à une variable locale pour un accès rapide.)