【问题标题】:how to use CFURLCreateCopyAppendingPathComponent properly with ARC enabled?如何在启用 ARC 的情况下正确使用 CFURLCreateCopyAppendingPathComponent?
【发布时间】:2012-04-27 08:49:06
【问题描述】:

我正在构建一个带有 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 线程而中断。

如果你知道我错过了什么,请告诉我! 谢谢!!!

【问题讨论】:

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


    【解决方案1】:

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

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

    【讨论】:

    • 罗布,感谢您的回复!事实上,这两种代码都能完美运行。我的代码中有一个委托问题,而 self.dirName.text 为零,所以这就是它坏的原因。
    猜你喜欢
    • 1970-01-01
    • 2011-12-03
    • 1970-01-01
    • 1970-01-01
    • 2012-06-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-08-06
    相关资源
    最近更新 更多