it-swarm.it

Ottenere l'indice di un oggetto da NSArray?

sto cercando di ottenere l'indice di un array tramite il metodo indexOfObject come segue ma quando provo a registrare il valore per testare l'indice ottengo un valore di immondizia .. a scopo di test ho un array con valori {57,56,58..} per ottenere un indice di diciamo 56,

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

il valore che ottengo è qualcosa come 2323421. cosa sto forse facendo di sbagliato ??

66
hemant

L'indice restituito da indexOfObject sarà il primo indice per un'occorrenza dell'oggetto. L'uguaglianza è testata usando il metodo isEqual.
Il valore di immondizia che ottieni è probabilmente uguale a NSNotFound.
Prova a testare anIndex su di esso. Il numero che stai cercando non è probabilmente nel tuo array:

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

o registra il contenuto dell'array per essere sicuro:

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

Gente,

Quando un oggetto non viene trovato nell'array, il metodo indexOfObject NON restituisce un valore 'immondizia'. Molti sistemi restituiscono un indice di -1 se l'elemento non viene trovato.

Tuttavia, su IOS - poiché indexOfObject restituisce un int UNSIGNED (aka NSUInteger) l'indice restituito deve essere maggiore o uguale a zero. Poiché "zero" è un indice valido, non è possibile indicare al chiamante che l'oggetto non è stato trovato, tranne restituendo un valore costante concordato su cui tutti noi possiamo testare. Questo valore concordato è chiamato NSNotFound.

Il metodo:

- (NSUInteger)indexOfObject:(id)anObject;

restituirà NSNotFound se l'oggetto non era nella matrice. NSNotFound è un intero POSITIVO molto grande (di solito 1 meno il massimo int sulla piattaforma).

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);

Sta dando l'output corretto, potresti aver fatto qualcosa di sbagliato con la memorizzazione di oggetti nella tua matrice.

6
iCoder4777

Prova questo:

NSArray's indexOfObject: metodo. Come il seguente:

NSUInteger fooIndex = [someArray indexOfObject: someObject];
5

Se stai usando Swift e gli opzionali assicurati che non siano scartati. Non puoi cercare l'indice degli oggetti che sono opzionali.

1
Josh O'Connor

indexOfObject methord otterrà l'indice della stringa corrispondente in quella matrice se la stringa è come @ "Test" e trovi come @ "TEST" Ora questo risintonizzerà un indice come un numero lungo

0
Jayasabeen

Ho appena controllato. Funziona bene per me. Controlla se il tuo array ha il numero particolare. Restituirà tali valori di immondizia se l'elemento non è presente.

0
visakh7