2013-02-22 5 views
3

Как скомпилировать следующий код с помощью ARC?Cast NSURL ** to CFURLRef *

int main() { 

    NSURL *url = [NSURL new]; 
    NSURL * __strong *urlPointer = &url; 
    CFURLRef *cfPointer = (__bridge CFURLRef *)urlPointer; 
    geturl(cfPointer); 
    NSLog(@"Got URL: %@", url); 
    return 0; 
} 

Я получаю следующее сообщение об ошибке:

Incompatible types casting 'NSURL *__strong *' to 'CFURLRef *' (aka 'const struct __CFURL **') with a __bridge cast 

Я знаю, что CFURLRef уже указатель, поэтому CFURLRef * является указателем на указатель, однако внешняя функция я использую (geturl), в качестве параметра требуется параметр CFURLRef *. У меня нет контроля над функцией, поэтому я не могу это изменить.

Как я могу наложить urlPointer на указатель CFURLRef *?

+0

Если вы имеете в виду делать 'GetURL (urlPointer)', то нет, как я получаю сообщение об ошибке 'неявное преобразование косвенного указателя на указатель Objective-C к«CFURLRef *»(ака 'const struct __CFURL **') запрещается с помощью ARC'. – Tyilo

ответ

10

Большая часть того, что вы делаете, - это просто свернутая указатель. Почему бы просто не сделать это:

CFURLRef cfPointer = NULL; 
geturl(&cfPointer); 
NSURL *url = (__bridge NSURL *)cfPointer; 
NSLog(@"Got URL: %@", url);