2010-02-08 4 views
-1

j'ai écrit une boucle en Objective-C, voici comment mon code ressemblel'application Mettre fin à cause de l'exception non interceptée en Objective-C pour l'iPhone app

NSString *string = [NSString [email protected]"/Users/Home/myFile.doc"]; 
NSString *[email protected]"\n"; 
NSArray *mainarray = [string componentsSeparatedByString:seperator]; 
// Since i want to parse each element of mainarray 
for(NSString *s in mainarray) 
{ 
    //again parising the string using a new separator 
    NSString newseparator = @"="; 
    NSArray *subarray = [s componentsSeparatedByString : newseparator]; 

    //Copying the elements of array into key and object string variables 

    NSString *key = [subarray objectAtIndex:0]; 
    NSLog(@"%@",key); 
    NSString *class_name= [subarray objectAtIndex:1]; 
    NSLog(@"%@",class_name); 

    // create an instance for the class_name 
     //dont knw how it ll take the value from file and ??? 

//Putting the key and objects values into hashtable 
    NSMutableDictionary = [NSDictionary dictinaryWithObject:class_name forKey:key]; 
} 

Chaque fois que j'exécuter ce code cette plante mon programme en disant, mettre fin à l'application en raison de l'exception uncaught NSRangeException

Comment connaître la plage de tableau et comment spécifier la condition de terminaison dans la boucle for ??? et plz laissez-moi savoir comment gérer cette exception ?? ?

Répondre

2

Je suis surpris que le code compile même. Si je me souviens bien, il ne peut pas compiler à moins d'avoir fait beaucoup d'efforts pour désactiver toute une série d'avertissements du compilateur.

NSString newseparator = @";"; 

Cela devrait donner une erreur d'écriture car vous n'avez pas le *.

NSString *key = [subarray objectAtIndex[0]]; 
NSString *object = [subarray objectAtIndex[1]]; 

Aucune de ces lignes de code n'a de sens.

Il semblerait que vous n'avez pas affiché le code actuel?


Maintenant, revenons à l'exception. Une exception de plage sera lancée si vous tentez d'accéder à un élément à un index situé en dehors de la plage d'index disponible dans le tableau. Ainsi, si componentsSeparatedByString: a retourné un tableau de 0 ou 1 éléments, alors [subarray objectAtIndex: 1]; provoquera une exception de plage à augmenter.

Ce que vous ne voulez pas voulez faire est de tenter de gérer l'exception en utilisant un bloc @catch. Dans Cocoa (et le développement de l'iPhone), les exceptions sont traitées comme des erreurs irrécupérables. Donc, au lieu de cela, utilisez la méthode -count sur NSArray pour vérifier que le tableau contient effectivement le # d'éléments que vous attendiez. Puisque vous écrivez un analyseur occasionnel, c'est probablement une bonne idée comme vérification minimale de la validité d'entrée.

+0

Hey désolé, c'est une erreur typo .. J'ai corrigé mon code ci-dessus .. – suse

+0

comment puis-je gérer cette exception? est-il un moyen de vérifier la gamme de tableau. comme ** if (s! = nil) **, mais même cela n'a pas fait de différence pour moi. – suse

+0

Pas de soucis, cela rend la réponse un peu plus difficile et vous aurez tendance à obtenir plus de pointeurs vers le didacticiel Objective-C que nécessaire. :) Réponse éditée. – bbum