2009-12-22 2 views
1

Я пытаюсь создать Cocoa Framework, которая представляет собой объектно-ориентированную оболочку вокруг процедурной структуры, написанной в Core Foundation. В процедурной структуре имеется ряд констант, которые определены как extern CFStringRef constantName.Создать постоянный NSString из константы CFStringRef

Как создать константы NSString, которые непосредственно отображают процедурные константы, так что в моей структуре я могу просто преобразовать константу NSString в константу CFStringRef в рамках такой структуры, что разработчик, использующий мою фреймворк, не должен знать бросает сам.

Все, что я пробовал, приводит к ошибке компилятора Initializer element is not constant. Это образец, который я хотел бы использовать:

Constants.h:

extern NSString * myConstant 

Constants.m:

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

Я успешно объявляя постоянные значения с NSString в Constants.m используя NSString *aConstant = @"someStringLiteral" но в этом случае я хочу иметь то же значение, что и CFStringRef s, которое я не могу игнорировать.

ответ

0

Вы пробовали:

NSString * myconstant = (NSString *)constantName; 

Вы можете найти тот же ответ здесь: How to convert CFStringRef to NSString? и там: CocoaDev: CFStringRef.

Действительно, Apple уже решила вашу проблему. Это называется Toll Free Bridging.

+1

Это вызывает ошибку, описанную выше. – Randall

+0

Как определяется ваш 'ConstantFromCFStringRef'? – mouviciel

+1

Я пробовал 'NSString * myConstant = (NSString *) CFStringRef;' но это выдает указанную выше ошибку. Я попытался использовать CFStringGetCStringPtr и CFStringGetCString, но они также потерпели неудачу, поэтому теперь я пытаюсь написать это, чтобы не открывать константы вообще (и где мне нужно их выставлять, я использую свои собственные константы и пара частных методов для их преобразования в базовую структуру). – Randall