2012-04-15 3 views
1

Я создаю приложение с FTP-соединением, и я пытаюсь использовать приложение SimpleFTPSample в качестве примера. У меня включен ARC в моем приложении, хотя он не отключен в учебнике по примерам.Как правильно использовать CFURLCreateCopyAppendingPathComponent с поддержкой ARC?

Из-за использования ARC, я столкнулся с проблемой с follwing кодом:

url = [NSMakeCollectable (CFURLCreateCopyAppendingPathComponent 
(NULL, (CFURLRef) url, (CFStringRef) self.dirNameText.text, true) 
) autorelease]; 

1) после удаления NSMakeCollectable и autorelease:

url = (CFURLCreateCopyAppendingPathComponent 
(NULL, (CFURLRef) url, (CFStringRef) self.dirNameText.text, true)); 

Теперь у меня есть три ARC ошибки литья : «Тип указателя Objective-C типа NSURL to C» «CFURLRef (...) требует мостового случая» и одной семантической проблемы: «Несовместимые типы указателей, назначающие« NSURL * __ strong »из« CF URLRef».

Как следует Xcode, я использую __bridge для преобразования, но я до сих пор одна из ошибок литья и семантической ошибка следующего кода:

url = (CFURLCreateCopyAppendingPathComponent 
(NULL, (__bridge CFURLRef) url, 
(__bridge CFStringRef) self.dirNameText.text, true)); 

Я искал решение, но могу не найти точное соответствие. Я изменил мой код, используя CFBridgingRelease, как показано в этом tutorial:

url = CFBridgingRelease(CFURLCreateCopyAppendingPathComponent 
(NULL, (__bridge CFURLRef) url, 
(__bridge CFStringRef) self.dirNameText.text, true)); 

... но приложение все еще ломать с EXC_BAD_ACCESS нитью.

Если вы знаете, что мне не хватает, сообщите мне! Спасибо !!!

ответ

1

Не похоже, что вам необходимо использовать Core Foundation. Попробуйте следующее:

url = [url URLByAppendingPathComponent:self.dirNameText.text isDirectory:YES]; 
+0

Rob, спасибо за ваш ответ! Фактически оба кода работают отлично. У меня была проблема с делегатом в моем коде, а self.dirName.text был нуль, поэтому он сломался. – jeroandris

Смежные вопросы