【问题标题】:how can I append file to array in block如何将文件附加到块中的数组
【发布时间】:2017-11-28 18:50:28
【问题描述】:

我有要附加到数组的文件,并且在块内执行,但文件不会附加到数组。我检查了文件是否为空并且它们不是,所以这不是问题。我真的需要帮助。我被困了六个小时。 ImageSource 是 github 上图像数据的 api。干杯。

    DispatchQueue.global(qos: .background).async {
        () -> Void in

        var files : [PFFile] = [] 
        var photos2: [ImageSource]?
      for i in 0..<13 {
                let indexpath = IndexPath(item: i, section: 0)
                photos2?[indexpath.row].fullResolutionImageData(completion: { (Data) in
                    if let imageData = Data, let image = UIImage(data: imageData), let data = UIImageJPEGRepresentation(image, 1.0){
                    let file = PFFile(data: data)

                            files.append(file!)

                    }
                })
        }
  }

【问题讨论】:

  • files.append(file!) 行被调用了吗?
  • 让我检查一下
  • 是的,当我添加一个断点时
  • 然后文件被添加到数组中。为什么不这样说?
  • 请您停止在您的问题上使用错误的标签。这个问题与 iOS 或 Objective-C 无关。这是一个 Swift 问题。

标签: swift xcode parse-platform swift3 pffile


【解决方案1】:

文件正在被附加到数组中——即files。但是files 是一个local 变量,所以在块运行之后,它就消失了。如果您在其他地方有其他数组,或者您试图在异步块之外访问 files 的值,那将会失败。

【讨论】:

  • 我该如何解决它。请告知,因为我不知道解决方案
  • 什么的“解决方案”?我不知道你想做什么——因为你没有告诉我。您只显示了您的代码的一个 sn-p,并且您在该 sn-p 中显示的任何代码都没有任何问题。这一切都完全符合预期。这就是为什么您的问题被否决的原因;没有问题,所以没有什么可问的。
【解决方案2】:

数组“photos2”似乎是 nil,所以函数“fullResolutionImageData(completion:)”什么也没做

【讨论】:

  • 不,我事先检查过,发现数据在 fullResolutionImageData 函数内的文件中,但在该函数之外,数组为 nil。低于马特所说的是正确的,但我不知道如何解决它。
  • 如果是这样,您可以尝试将数组“文件”的定义移到 Dispatch 闭包之外以保持生命周期
【解决方案3】:

您需要在闭包之外声明您的数组,以便它存在于闭包范围之外。在视图控制器的顶部创建一个数组属性(var files = []),然后在闭包调用中

self.files.append(无论你在附加什么)

【讨论】:

  • 声明是什么意思
  • 你说的是dispatch函数之外
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-04-15
  • 1970-01-01
  • 2017-09-11
  • 1970-01-01
  • 1970-01-01
  • 2017-11-13
相关资源
最近更新 更多