2016-03-21 27 views
1

我觉得我的代码已经接近将NSData数组传输到我的Apple Watch应用程序扩展。由于Apple Watch不符合Parse协议,我需要将我的PFFiles转换为NSDatas(或UIImages),然后将它们转移。我要么做错了,要么只是在错误的地方有几行代码。数据来自我的解析数据库,我知道有数据,我已经测试过。 print(fileArray)打印正确的PFFiles,但print(imageArray)打印“[]”。需要帮助将数组内容从PFFile转换为NSData然后传输到应用程序扩展

+1

在异步'getDataInBackgroundWithBlock'方法向该数组添加任何内容之前,您正在打印图像数组。看起来像[某人已经向你解释](http://stackoverflow.com/questions/36072340/watchos-2-not-reading-nsdata-from-iphone-appdelegate)。 – 2016-03-21 16:15:34

回答

1
query.findObjectsInBackgroundWithBlock({ (objects, error) -> Void in 

    var fileArray = [PFFile]() 
    var imageArray = [NSData]() 

    if error == nil && objects!.count > 0 { 

     for object in objects! { 

      if let message = object["imageFile"] as? PFFile { 

       fileArray.append(message) 
      } 
     } 
    } 

    for object in fileArray { 
     object.getDataInBackgroundWithBlock({ (data, error) -> Void in 
      imageArray.append(data!) 
      print(imageArray) 
      replyHandler(["images":imageArray]) 
     }) 

    } 
    print(fileArray) 


}) 

那么,你可能会觉得imageArray打印得太频繁,而且replyHandler可能被频繁调用。

但是,由于该块在当前方法被刷新后异步执行,所以没有机会打印或处理该方法中的结果。

+0

是的,所以我跑了这个,我只是得到imageArray中的第一项,但它填充我的桌子,所以这很好!如果没有机会通过这种方式打印或处理结果,我应该尝试一种完全不同的方式来传输数据吗?感谢您的帮助人。 – bme003

+0

您确实获得了该阵列中的所有图像,但不是该块的第一次调用。每次请求完成时都会调用该块。您应该了解异步处理和块,然后找到一种更智能的方法来处理这里同时出现的大量任务。 –

+0

我明白你的意思,在调试后我会看到它是如何以及何时被解雇的。我只需要找到另一种方式..非常感谢!我已经投了你的答案,但它不显示,直到我得到更多的代表点。 – bme003