2010-04-26 20 views
1

Nous intégrons une bibliothèque dans une application iPhone qui semble utiliser la boîte à outils google pour iPhone en interne. La boîte à outils google ajoute une méthode gtm_stringBySanitizingAndEscapingForXML à NSString. Le problème est, chaque fois que nous essayons de faire un appel à cette bibliothèque, nous obtenonsUne catégorie appliquée à NSString s'applique-t-elle également à NSCFString via le "numéro vert"?

[NSCFString gtm_stringBySanitizingAndEscapingForXML]: unrecognized selector sent to instance 0x272478

Il semble donc la bibliothèque appelle cette méthode sur un NSCFString, auquel la catégorie ne s'applique pas. Alors ... est-ce que la catégorie ne s'appliquera pas à travers le pont sans frais vers les classes CoreFoundation? Si c'est le cas, nous savons au moins pourquoi ça explose. Déterminer comment le réparer est une question différente.

Répondre

2

Les catégories appliquées à NSString s'appliquent également à NSCFString, car NSCFString est une sous-classe de NSMutableString qui est une sous-classe de NSString.

Mais avez-vous inclus la bibliothèque Google Toolbox (GTMNSString+XML.m)?

+0

La boîte à outils google est intégrée dans la bibliothèque, donc si nous l'incluons, nous obtenons des erreurs à cause de la redéfinition des classes. Mon collègue a effectivement résolu le problème, il y avait un indicateur de lien qui l'a fait se casser. Merci pour votre réponse. – tobyc

2

NSCFString classe n'est pas une sous-classe de NSMutableString ... C'est juste une autre classe de cluster NSString. Donc, si vous avez un NSCFString foo var et vous tester ceci:

BOOL isNSString = [foo isKindObClass:[NSString class]]; 

Vous obtiendrez que isNSString est NO.

Je rencontre quelques problèmes parce que j'ai créé une catégorie NSString et je ne sais pas comment appliquer les nouvelles méthodes lorsque la classe est une NSCFString ou toute autre classe de ce groupe ...


EDIT: Ok, j'ai trouvé la solution. Bien que ces tests sont revenus NO:

[myString isKindOfClass:[NSString class]]; 
[myString respondsToSelector:@selector(myNSStringCategorySelector:)]; 

J'ai forcé l'exécution de la méthode de la classe NSCFString, et cela a fonctionné correctement !!

J'espère que ça va aider quelqu'un!

+0

Forcé l'exécution comment? Utiliser performSelector? – chris838

0

On dirait que l'implémentation de cette catégorie n'est pas liée à votre programme. En supposant que votre bibliothèque est compilée en tant que bibliothèque statique, vous devrez peut-être ajouter l'indicateur de liens -ObjC à votre projet. Pour plus d'informations, jetez un oeil à this technote. Le bug de l'éditeur de liens mentionné ici devrait être corrigé avec la dernière version de Xcode.