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

标签 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 和 autorelease 后:

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 线程而中断。

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

最佳答案

看起来您根本不需要使用 Core Foundation。试试这个:

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

关于objective-c - 如何在启用 ARC 的情况下正确使用 CFURLCreateCopyAppendingPathComponent?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10167086/

相关文章:

objective-c - 什么是 NSCache?

objective-c - SDWebImage 在缓存它们之前调整/缩放/裁剪来自 url 的图像

objective-c - ivars 和属性应该在头文件还是实现文件中声明?

php - 如何在 PHP Laravel 中隐藏 URL 值

apache - 如何从 Apache 重定向到 Tomcat?

Java如何在Mac上用命令打开url?

ios - 通过几个不相关的类传递方法调用

objective-c - Swift Optional Int(Int?)可以通过桥接暴露给 Objective-C 吗?

ios - Swift - UITableView 设置分隔符样式

ios - 尝试创建一个 Collection View 在滚动时滑过另一个 Collection View 的效果