2012-10-01 3 views
0

J'ai un NSArray (RSIatAddr), et je veux vérifier si l'objet à l'index donné = 0 (ou une autre constante arbitraire) mais le code suivant ne me donne aucun avertissement/erreur; mais est lancer une exceptionvérification des valeurs NSArray

if ([[RSIatAddr objectAtIndex:j] isEqualToNumber:nil]) { 
    [sumRSI addObject:[NSNumber numberWithInt:[[RSIatAddr objectAtIndex:j]intValue]* 
    [[sumRSI objectAtIndex:j] intValue]]]; } 

L'erreur que je reçois:

2012-10-02 00:42:00.266 NetSearch+DetectLocation[3741:707] 
*** Terminating app due to uncaught exception 
'NSInvalidArgumentException', reason: '-[__NSCFNumber compare:]: nil argument' 
+1

Même si vous pouvez mettre la plus grande partie du code sur une ligne, il peut être judicieux de diviser votre code en plusieurs lignes afin de le rendre plus lisible. Veuillez également indiquer votre exception. – 5StringRyan

+0

Je suis un peu nouveau à cela, donc désolé à ce sujet, j'espère que c'est mieux: –

Répondre

1

Sans voir le code qui remplit réellement votre tableau, son tableau est probablement titulaire d'un autre type que vous attendez. Essayez de définir un point d'arrêt juste avant cette ligne de code, et tapez "po [[RSIatAddr objectAtIndex: j] class]" et voyez ce qui s'y trouve, alors vous pouvez aussi essayer votre isEqualToNumber dans la fenêtre de débogage pour voir si cela réussit.

Je viens dans la mis en œuvre cette AppDelegate d'une nouvelle application iOS et il fonctionne:

NSArray *array = [[NSArray alloc] initWithObjects:[NSNumber numberWithInt:0], [NSNumber numberWithInt:1], nil]; 
NSLog(@"%@", array); 

for (NSNumber *num in array) { 
    if ([num isEqualToNumber:[NSNumber numberWithInt:0]]) { 
     NSLog(@"Equal"); 
    } else { 
     NSLog(@"Not Equal"); 
    } 
} 
+0

Salut, j'ai peuplé mon RSIatAddr à partir d'une Plist 'NSMutableArray * RSIatAddr = [[dictionaryOfAddresses objectForKey: @" StoredAddr "] objectForKey: currentAddr]; ' Les valeurs que je remplis RSIatAddr avec sont de type, Number. Je sais que le tableau est lancé correctement parce que j'ai imprimé son contenu dans la fenêtre du débogueur, et ça semble bien? - Des conseils ici? –

+0

Je ne suis pas en face de mon mac pour l'essayer maintenant, mais essayez d'envelopper la constante 0 dans isEqualToNumber avec un [NSNumber numberWithInt: 0] ou utilisez isEqualToValue à la place. –

+0

OUI! ... . Envelopper le 0 constante avec votre travail de suggestion, merci encore une fois! –

3

isEqualToNumber: prend un NSNumber comme argument, et non l'entier que vous passez.

L'entier que vous utilisez, 0, se trouve être la valeur de nil, mais tout entier serait extrêmement improbable d'être une valeur de pointeur valide pour un NSNumber et se briserait donc aussi.

+0

lançant toujours la même exception après votre changement suggéré si –

+0

@TaskinulHaque s'il vous plaît modifier votre réponse pour inclure le code qui continue de planter malgré la correction pour passer une instance 'NSNumber'. –

+0

done :) - le code lève la même exception –

Questions connexes