【问题标题】:My CompletionHandler will not execute. Why?我的 CompletionHandler 不会执行。为什么?
【发布时间】:2018-08-03 12:35:34
【问题描述】:

我有以下代码:

document?.open { success in
        if success {
            print("file opened")
            self.consumed = self.document?.consumed
        } else {
            print("file read failure")
        }
    } 

可以看出,我有一个成功和失败的打印。但都没有打印出来。

合理的问题是文件不存在,不可读或其他什么。因此,我在这段代码之前添加了以下内容:

if document != nil {
        print("not nil")
        let asString = document?.fileURL.path
        let toast = FileManager.default.fileExists(atPath: asString!)
        if toast {
            print("file exist")
        } else {
            print("file does not exist")
        }
    } else {
        print("nil")
    }
 if FileManager.default.isReadableFile(atPath: (document?.fileURL.path)!)
    {
        print("readable")
    }
    else
    {
        print("not readable")
    }

这对我来说表明它是:不为零,存在且可读。

有时我会错过不执行此完成代码吗?能够打开文件会很棒,但我认为它没有运行的事实是第一步。

关于文件的注意事项。它是从包中读取并复制到 Documents 目录的文件。我查看了文件的属性,并没有发现任何异常。

【问题讨论】:

  • 方法open 可能有问题。
  • 要么你的document实际上 nil 要么你正在使用一个不能被认为是可靠的beta SDK,因为它是测试版.
  • 但我的测试证明它不是零。
  • 如果documentnil,则代码可靠地崩溃。
  • 还有一个问题。会不会是副本的问题?我一直在寻找一些版本以确保文件可用。这在 Swift 中似乎没有必要。无论如何,我怀疑副本没有完成或以某种方式损坏了文件。然而,到目前为止,对属性的评估一无所获,

标签: swift uidocument


【解决方案1】:

尝试将document?.open 替换为document!.open,或者使用保护让来真正确保文档不为零。因为如果 document 为 nil,则整个调用将被跳过。

Here 你可以阅读可选链。

【讨论】:

  • document!.open 没有不同的行为。不确定我是否知道如何将守卫与 completionHandler 一起使用。
  • @jz_ 嗯,这很奇怪。守卫会检查该文件不是零。什么类型的文档?
  • 目的,文档是保存为自定义 UTI 格式的 JSON 文件。这就是你要问的。我想,一项检查是返回到 JSON ext 并以这种方式阅读,看看自定义名称是否是问题。
  • 你在 UTI 格式上迷失了我,但如果打开确实可以自定义打开的东西,当然也可能是罪魁祸首。
  • 基本上你可以声明自己的扩展类型。
猜你喜欢
  • 1970-01-01
  • 2013-07-19
  • 1970-01-01
  • 1970-01-01
  • 2016-07-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-08-16
相关资源
最近更新 更多