2009-12-22 3 views
1

Je tente de créer une structure Cocoa qui soit une enveloppe orientée objet autour d'un cadre procédural écrit dans la base de données principale. Le cadre procédural a un certain nombre de constantes qui sont toutes définies comme extern CFStringRef constantName. Comment créer des constantes NSString qui correspondent directement aux constantes procédurales afin que dans mon framework je puisse simplement transformer la constante NSString en la constante CFStringRef dans le framework de sorte que le développeur utilisant mon framework n'ait pas besoin de se rendre compte de les moules lui-même.Créer une constante NSString à partir de la constante CFStringRef

Chaque chose que j'ai essayé résulte dans l'erreur de compilation Initializer element is not constant. C'est le modèle que je voudrais utiliser:

Constants.h:

extern NSString * myConstant 

Constants.m:

#import "Constants.h" 
NSString *myConstant = ConstantFromCFStringRef; 

Je déclare avec succès des valeurs constantes avec NSString en utilisant Constants.m NSString *aConstant = @"someStringLiteral" mais dans ce cas, je veux avoir la même valeur que les CFStringRef s que je ne peux pas ignorer.

Répondre

0

Avez-vous essayé:

NSString * myconstant = (NSString *)constantName; 

Vous pouvez trouver la même réponse ici: How to convert CFStringRef to NSString? et là: CocoaDev: CFStringRef.

En effet Apple a déjà résolu votre problème. C'est ce qu'on appelle Toll Free Bridging.

+1

Ceci déclenche l'erreur que j'ai décrite ci-dessus. – Randall

+0

Comment est défini votre 'ConstantFromCFStringRef'? – mouviciel

+1

J'ai essayé 'NSString * myConstant = (NSString *) CFStringRef;' mais cela renvoie l'erreur ci-dessus. J'ai essayé d'utiliser CFStringGetCStringPtr et CFStringGetCString, mais ceux-ci ont également échoué, donc j'essaye maintenant d'écrire ceci pour éviter d'exposer les constantes du tout (et où je dois les exposer, j'utilise mes propres constantes et un deux méthodes privées pour les convertir en vue d'une utilisation par le cadre sous-jacent). – Randall