2009-12-19 8 views
1

Dans une méthode, je vais avoir le code suivant:article NSArray à NSString

NSString* tempString = (NSString*)arg; 
NSArray* notificationDetails = [tempString componentsSeparatedByString:@"##"]; 
NSString* tempString1 = [notificationDetails objectAtIndex:2]; 
. 
. 
. 
. 
. 
. 
NSLog(tempString1); 

Lorsque je compile le code, la compilation sans erreur et d'avertissement. Mais lors de l'exécution (en mode débogage avec points d'arrêt) son écrasement à l'instruction NSLog. Le problème que je vois est en obtenant "[notificationDetails objectAtIndex: 2];" Quelle est la solution pour cela.

Répondre

1

Utilisez

NSLog(@"%@", tempString1);

+0

Si tempString1 est une chaîne (valide), il s'agit également d'une chaîne de format valide. (Bien que je préfère aussi la version explicite avec une chaîne de format) – Chris

+0

Si votre chaîne est vraiment une chaîne de format, mais vous ne passez pas les arguments nécessaires, votre application peut se bloquer. Essayez NSLog (@ "% @"); –

0

Combien d'éléments ne contiennent notificationDetails? Utilisez le code suivant pour savoir: NSLog (@ "% d elements", [notificationDetails count]);

Est-ce que arg est une chaîne du tout? NSLog (@ "Classe d'argument est% @", [classe arg]);

6

avec ...

NSLog(tempString1); 

... est dangereux. Bien qu'il semble que NSLog accepte n'importe quelle chaîne comme seul paramètre, en fait la définition de la fonction réelle appelée indique clairement que le premier paramètre est analysé en interne comme une chaîne de format.

void NSLogv (
    NSString *format, 
    va_list args 
); 

Cela signifie que les caractères de la chaîne qui ont le format qui signifie dire « % » sera considérée comme mise en forme analysable, pas de caractères. Donc, si vous essayez de passer la chaîne, "vente 40% de réduction" NSLog va chercher des arguments et planter quand il ne les trouve pas.

0

Une possibilité supplémentaire, en fonction de la longueur de l'ellipse: componentsSeparatedByString: renvoie un tableau autoeleased. Mais je suppose que les composants sont insuffisants.