web-dev-qa-db-fra.com

Obtenir l'index d'un objet de NSArray?

j'essaie d'obtenir l'index d'un tableau par le biais de la méthode indexOfObject comme suit, mais lorsque j'essaie d'enregistrer la valeur pour tester l'index, j'obtiens une valeur erronée. {57,56,58..} Pour obtenir un index de disons 56,

NSNumber *num = [NSNumber numberWithInteger:56];
NSInteger Aindex = [myArray indexOfObject:num];
NSLog(@" %d",Aindex);

la valeur que je reçois est quelque chose comme 2323421. qu'est-ce que je fais peut-être mal ??

66
hemant

L'index renvoyé par indexOfObject sera le premier index d'une occurrence de votre objet. L'égalité est testée à l'aide de la méthode isEqual.
La valeur de mémoire que vous obtenez est probablement égale à NSNotFound.
Essayez de tester anIndex contre cela. Le nombre que vous recherchez ne figure probablement pas dans votre tableau:

NSNumber *num=[NSNumber numberWithInteger:56];
NSInteger anIndex=[myArray indexOfObject:num];
if(NSNotFound == anIndex) {
    NSLog(@"not found");
}

ou enregistrez le contenu du tableau pour être sûr:

NSLog(@"%@", myArray);
143
user866214

Gens,

Lorsqu'un objet n'est pas trouvé dans le tableau, la méthode indexOfObject NE renvoie PAS de valeur 'garbage'. De nombreux systèmes renvoient un index de -1 si l'élément n'est pas trouvé.

Cependant, le IOS - parce que l'indexOfObject renvoie un UNSIGNED int (ou NSUInteger), l'index renvoyé doit être supérieur ou égal à zéro. Dans la mesure où 'zéro' est un index valide, il est impossible de indique à l'appelant que l'objet n'a pas été trouvé - sauf en renvoyant une valeur constante convenue que nous pouvons tous tester. Cette valeur convenue constante est appelée NSNotFound.

La méthode:

- (NSUInteger)indexOfObject:(id)anObject;

renverra NSNotFound si l'objet n'était pas dans le tableau. NSNotFound est un très grand entier POSITIF (généralement 1 moins le maximum int sur la plate-forme).

39
joe
NSNumber *num1 = [NSNumber numberWithInt:56];
    NSNumber *num2 = [NSNumber numberWithInt:57];
    NSNumber *num3 = [NSNumber numberWithInt:58];
    NSMutableArray *myArray = [NSMutableArray arrayWithObjects:num1,num2,num3,nil];
    NSNumber *num=[NSNumber numberWithInteger:58];

    NSInteger Aindex=[myArray indexOfObject:num];

    NSLog(@" %d",Aindex);

Cela vous donnera peut-être le bon résultat en stockant des objets dans votre tableau.

6
iCoder4777

Essayez ceci:

NSArray's indexOfObject: méthode. Tels que les suivants:

NSUInteger fooIndex = [someArray indexOfObject: someObject];
5

Si vous utilisez Swift et les options, assurez-vous qu’elles ne sont pas encapsulées. Vous ne pouvez pas rechercher dans l’index des objets qui sont des options.

1
Josh O'Connor

indexOfObject methord obtiendra l'index de la chaîne correspondante dans ce tableau si la chaîne ressemble à @ "Test" et que vous trouvez comme @ "TEST". Ceci retournera un index comme un nombre long

0
Jayasabeen

Je viens de vérifier. Cela fonctionne bien pour moi. Vérifiez si votre tableau a ce numéro particulier. Il renverra de telles valeurs parasites si l'élément n'est pas présent.

0
visakh7