2009-12-22 22 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