2009-12-22 24 views
1

我正在尝试创建一个Cocoa Framework,它是一个围绕在Core Foundation中编写的过程框架的面向对象的包装器。程序框架有许多常数,全部定义为extern CFStringRef constantName从常量CFStringRef创建常量NSString

如何创建直接映射到过程常量的NSString常量,以便在我的框架中,我可以简单地将NSString常量强制转换为框架内的CFStringRef常量,以便使用框架的开发人员不需要知道投自己。

我试过的每件事情都会导致编译器错误Initializer element is not constant。这是我想的是使用模式:

Constants.h:

extern NSString * myConstant 

Constants.m:

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

我宣布成功在Constants.m使用NSString *aConstant = @"someStringLiteral"与NSString的常数值但在这种情况下,我想要获得与我不能忽视的CFStringRef相同的价值。

回答

0

你试过:

NSString * myconstant = (NSString *)constantName; 

你可以在这里找到了相同的答案:How to convert CFStringRef to NSString?有:CocoaDev: CFStringRef

的确苹果已经解决了你的问题。这被称为Toll Free Bridging

+1

这会引发上面描述的错误。 – Randall

+0

如何定义你的'ConstantFromCFStringRef'? – mouviciel

+1

我试过'NSString * myConstant =(NSString *)CFStringRef;'但是会引发上述错误。 我试图使用CFStringGetCStringPtr和CFStringGetCString,但这些也失败了,所以我现在试图写这个以避免必须公开所有常量(以及我必须公开它们的地方,我使用自己的常量和几个私有方法将它们转换为底层框架使用)。 – Randall