调用 -createDirectoryAtURL: 导致崩溃

Posted

技术标签:

【中文标题】调用 -createDirectoryAtURL: 导致崩溃【英文标题】:Calling -createDirectoryAtURL: causes crash 【发布时间】:2011-11-25 10:28:06 【问题描述】:

我现在真的很困惑。这是我的一段代码:

NSFileManager *manager = [NSFileManager defaultManager];

NSURL *backup = [self applicationDocumentsDirectory];
backup = [backup URLByAppendingPathComponent:@"Old_Data_File"];

[manager createDirectoryAtURL:backup withIntermediateDirectories:YES attributes:nil error:nil];

执行此代码时,它会在消息的最后一行崩溃

-[NSFileManager createDirectoryAtURL:withIntermediateDirectories:attributes:error:]:无法识别的选择器发送到实例 0x5e59220

这怎么可能是一个无法识别的选择器?

编辑:

manager 不是 nil 并将backup 打印到控制台会导致

type = 15, string = file://localhost/Users/f***/Library/Application%20Support/iPhone%20Simulator/4.3.2/Applications/D37C5B93-A778-4555-8953-814F823B1116/Documents/Old_Data_File,编码 = 134217984,基数 = (null)

直到Old_Data_File路径存在,最后一个组件应该由文件管理器创建...

【问题讨论】:

确保manager 不为空。另外,backup 是有效的文件 URL 吗? 您在哪个版本的 ios 上进行测试? (此方法为iOS 5+/OS X 10.7+。) 【参考方案1】:

哦...您的目标是 iOS 5.0 及更高版本吗?此 API 在 iOS 4.3 上不存在。

【讨论】:

哦!我现在才看到NS_AVAILABLE(10_7, 5_0)。所以我应该使用采用NSString的方法? 如果你想支持 iOS 4.3、3.X 甚至 2.0...是的。【参考方案2】:

你是这个意思吗?

 (BOOL)createDirectoryAtPath:(NSString *)path withIntermediateDirectories:(BOOL)createIntermediates attributes:(NSDictionary *)attributes error:(NSError **)error

AtPath 而不是 AtURL?

【讨论】:

以上是关于调用 -createDirectoryAtURL: 导致崩溃的主要内容,如果未能解决你的问题,请参考以下文章

java三种调用方式(同步调用/回调/异步调用)

LINUX系统调用

引用调用 vs 复制调用调用

RPC 调用和 HTTP 调用的区别

js方法调用

深入理解Java虚拟机——方法调用(解析调用)