88 votes

Création d’une liaison faible - vérifier si une classe existe et comment utilise cette classe

Je suis en train de créer une app universelle iPhone, mais il utilise une classe définie uniquement dans une version plus récente du kit de développement. Le cadre existe sur les anciens systèmes, mais n’est pas une classe définie dans le cadre.

Je sais que je veux utiliser une sorte de liaison faible, mais toute la documentation que je peux trouver parle de runtime vérifie existence fonction - comment puis-je vérifier qu’une classe existe ?

165voto

Senseful Points 11193

Utiliser NSClassFromString(). Si elle renvoie nil, la classe n'existe pas, sinon ce sera le retour de la classe de l'objet qui peut être utilisé.

C'est la méthode recommandée selon Apple dans ce document:

[...] Votre code d'essai pour la l'existence d'une classe à l'aide de NSClassFromString() qui sera de retour valide d'un objet de classe si [la] classe existe ou nil si il doesn't. Si l' la classe n'existe pas, votre code peut l'utiliser [...]

Mise à jour: Ben Mosher et code007 souligné, il existe un autre moyen de le faire sur iOS que de 4,2...

Sur iOS 4.2 et plus: (voir code007 la réponse pour plus de détails)

if ([SomeClass class]) {
    // class exists
    SomeClass *instance = [[SomeClass alloc] init];
} else {
    // class doesn't exist
}

Sur OS X ou iOS:

Class klass = NSClassFromString(@"SomeClass");
if (klass) {
    // class exists
    id instance = [[klass alloc] init];
} else {
    // class doesn't exist
}

69voto

code007 Points 1588

Pour de nouveaux projets qui utilise une base SDK d'iOS 4.2 ou une version ultérieure, il y a cette nouvelle approche recommandée consiste à utiliser la méthode de la classe NSObject pour vérifier la disponibilité de faiblement liées classes au moment de l'exécution. c'est à dire

if ([UIPrintInteractionController class]) {
    // Create an instance of the class and use it.
} else {
    // Alternate code path to follow when the
    // class is not available.
}

source: http://developer.apple.com/library/ios/#documentation/DeveloperTools/Conceptual/cross_development/Using/using.html#//apple_ref/doc/uid/20002000-SW3

Ce mécanisme utilise la NS_CLASS_AVAILABLE macro, qui est disponible pour la plupart cadre de iOS (remarque il peut y avoir certains cadres qui ne sont pas encore en charge le NS_CLASS_AVAILABLE - vérifier la version d'iOS note pour cette). Extra paramètre de configuration peut également être nécessaire qui peut être lu dans la Pomme de la documentation de lien fourni ci-dessus, cependant, l'avantage de cette méthode est que vous obtenez de type statique de contrôle.

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