193 votes

Quelle est la bonne façon de vérifier une chaîne nulle en Objective-C ?

J’utilisais cela dans mon application iPhone

mais elle lève une exception, et la console affiche que le titre est « (null) ».

Alors j’utilise ceci maintenant :

Quelle est la différence, et quelle est la meilleure façon de déterminer si une chaîne est nulle ?

408voto

Peter N Lewis Points 12025

Comme d'autres l'ont souligné, il existe de nombreux types de "null" sous Cocoa/Objective C. Mais une autre chose à noter est que [titre isKindOfClass:[NSNull classe]] est inutilement complexe, car [NSNull null] est documenté pour être un singleton de sorte que vous pouvez vérifier pour le pointeur de l'égalité. Voir les Sujets du Cacao: Utiliser la valeur Null.

Donc un bon test pourrait être:

if (title == (id)[NSNull null] || title.length == 0 ) title = @"Something";

Notez comment vous pouvez utiliser le fait que, même si le titre est nul, le titre.la longueur sera de retour 0/nul/faux, c'est à dire 0 dans ce cas, si vous n'avez pas de cas particulier. C'est quelque chose que les gens qui sont nouveaux à l'Objective-C ont de la difficulté à s'habituer, surtout venant d'autres langues où les messages/appels de méthode à zéro incident.

26voto

Bluephlame Points 1794

C’est aussi simple que

n’oubliez pas qu’en objective C si l’objet est null il retourne 0 comme valeur.

Cela vous obtiendrez une chaîne nulle et une chaîne de longueur 0.

6voto

TimM Points 71

Consultez les articles liés sur ce site:

Je pense que ton erreur est liée à quelque chose d'autre que vous ne devriez pas avoir besoin de faire des vérifications supplémentaires.

Voir aussi cette question: http://stackoverflow.com/questions/598396/proper-checking-of-nil-sqlite-text-column

5voto

nenchev Points 57

Quoi avec tous ces "œuvres pour me répond" ? Nous sommes tous de codage dans la même langue et les règles sont

  1. Assurer la référence n'est pas null
  2. Vérifiez et assurez-vous que la longueur de la chaîne n'est pas 0

C'est ce qui sera le même pour tous. Si une solution ne "travaille pour vous", c'est uniquement parce que votre application ne sera pas permettre à un scénario où la référence peut être null ou la longueur de la chaîne à 0. La bonne façon de le faire est la méthode qui gérera ce que vous voulez dans tous les cas.

4voto

diederikh Points 17459

Si vous voulez tester contre tous les objets nuls / vides (comme les chaînes vides ou les tableaux / ensembles vides), vous pouvez utiliser ce qui suit:

 static inline BOOL IsEmpty(id object) {
    return object == nil
        || ([object respondsToSelector:@selector(length)]
        && [(NSData *) object length] == 0)
        || ([object respondsToSelector:@selector(count)]
        && [(NSArray *) object count] == 0);
}
 

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X