如何在启用ARC的情况下正确使用CFURLCreateCopyAppendingPathComponent?

时间:2012-04-15 23:26:44

标签: objective-c ios url ftp automatic-ref-counting

我正在使用FTP连接构建应用,我正在尝试使用SimpleFTPSample应用作为示例。我在我的应用程序中启用了ARC,而示例教程中没有禁用它。

由于使用ARC,我遇到了以下代码的问题:

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

1)删除NSMakeCollectable并自动释放后:

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

现在我有三个ARC 投射错误: “Objective-C指针类型NSURL到C指针类型'CFURLRef(...)的情况需要一个桥接案例”和一个语义问题:“不兼容的指针类型从'CFURLRef'分配给'NSURL * __ strong'”。

正如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 个答案:

答案 0 :(得分:1)

您似乎根本不需要使用Core Foundation。试试这个:

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