【问题标题】:NSData dataWithContentsOfURL returning nil specifically in iOS 8NSData dataWithContentsOfURL 专门在 iOS 8 中返回 nil
【发布时间】:2015-08-26 11:34:38
【问题描述】:

我想使用[NSData dataWithContentsOfURL:] 从本地文件中获取NSData,但即使[NSFileManager defaultManager] 返回的fileSize 是正整数,我也会得到nil

令人惊讶的是,当基本 sdk 从 iOS 7 增加到 iOS 8 时,我遇到了这个问题。

【问题讨论】:

  • 文件名是本地的吗?
  • 根据手册页,此 API 可能会失败。要检查失败原因,请使用以下 API。 + (instancetype)dataWithContentsOfURL:(NSURL *)aURL options:(NSDataReadingOptions)mask error:(NSError **)errorPtr
  • @hd1 是的,文件是本地的。
  • @NulledPointer 试过了,没有给出任何调试信息

标签: ios8 nsdata nsurl nsfilemanager


【解决方案1】:

NSData 和 URL:有龙

+[NSData dataWithContentsOfURL:] 可以出于多种原因返回 nil。如果在尝试使用该 URL 时出现任何问题,此方法将返回 nil。例如,文件可能不存在,网络连接可能超时,或者 URL 甚至可能格式错误。返回 nil 并且应用程序不知道为什么。

+ [NSData dataWithContentsOfURL:options:error:] 另一方面,会告诉调用者出了什么问题。当返回 nil 时,错误参数将填充一个描述发生的问题的对象。使用这种方法可以直接回答“为什么”的问题。

这两种方法都是同步方法,不鼓励将它们用于处理文件、网络资源,尤其是从网络资源提供的文件。这些方法会阻塞调用者,并不是真正用于这些用途。最好使用输入流或 NSURLSession。

可以参考enter link description here

【讨论】:

    【解决方案2】:

    你确定你也传递了 Bundle 路径吗?

    试试这个

    NSString* path = [[NSBundle mainBundle].bundlePath stringByAppendingPathComponent:yourPath];
    NSData* data = [NSData dataWithContentsOfURL:path];
    

    【讨论】:

      【解决方案3】:

      我的情况。它在 URL 中有一个空格

      删除空格

      【讨论】:

        【解决方案4】:

        我不确定它是 iOS 错误还是它在 iOS 7 基本 SDK 中有效,而不是在 iOS 8 中有效,但这是我在浪费几个小时调试代码后找到的解决方案: -(

        使用[NSData dataWithContentsOfFile:(NSString *)] 代替dataWithContentsOfURL

        【讨论】:

          猜你喜欢
          • 2019-01-24
          • 2014-08-12
          • 2011-07-14
          • 2015-12-10
          • 2016-10-19
          • 1970-01-01
          • 1970-01-01
          • 2016-01-12
          相关资源
          最近更新 更多