getDataInBackgroundWithBlock

getDataInBackgroundWithBlock

我试图从Parse查询图像,然后继续运行fatal error: unexpectedly found nil while unwrapping optional value。我不确定这是否与最近对Swift和Xcode的更新有关,所以可能是在解析端,或者肯定是用户错误。
getDataInBackGroundWithBlock将接受的唯一选项是NSData?NSError?。如果我尝试解开它们或使用其他类型,它将不会编译。
PFQuery按预期返回数据。只有当试图在PFFile调用中从NSData切换到getDataInBackGroundWithBlock时,才会出现问题。
框架已连接并运行。我已经测试过很多次了。
下面是调用堆栈:
我已经连续工作了12个多小时了。我到处找过,也试过很多不同的东西。我不认识和斯威夫特或Xcode一起工作的人,你的帮助会越来越大。
以下是我尝试过的其他线索,一条是我自己的:
Unresolvable error with Parse "Get Data In Background With Block"
Parse and Swift 1.2 issue
Parse getDataInBackgroundWithBlock not fetching in order
Swift Image retrieving from Parse sdk - getting crashed
还分析文档:
https://www.parse.com/docs/ios_guide#files/iOS(他们的例子是我今天的起点)

var photoArray: Array<UIImage> = []


override func viewDidLoad() {
    super.viewDidLoad()

    callPFObjectQuery()

    let testObject = PFObject(className: "QuestionMaster") //testobject
    testObject["foo"] = "bar" //testobject
    testObject.saveInBackgroundWithBlock { (success: Bool, error: NSError?) -> Void in
        println("Object has been saved.")

    }
}

func callPFObjectQuery() {

    var finalObjects: [PFObject] = []
    var nsdataObjects: NSData?

    var query: PFQuery = PFQuery(className: "QuestionMaster")
    query.findObjectsInBackgroundWithBlock { (objects: [AnyObject]?, error: NSError?) -> Void in

        for object in objects! {

            let imageFiles = object["questionImage"] as! PFFile!

//error line     imageFiles.getDataInBackgroundWithBlock { (imageData: NSData?, error: NSError?) -> Void in

                    if error == nil {

                        dispatch_async(dispatch_get_main_queue()) {

                            let image = UIImage(data: imageData!)
                            self.photoArray.append(image!)
                            println(self.photoArray[0])

                        }

                    }

                }
            }

        }
    }

更新,2015年11月12日-斯威夫特1.2:我已经发布了好几个月了,因为它有超过1k的浏览量和一个没有任何支持的答案,我觉得最好还是回去看看,确保我选择的确实是正确的。我还没有经历和再次测试,但已经变得非常,非常熟悉(6-8k行)的Parse SDK和Swift我对我提供的答案感到满意。Uttam Sinha非常接近,但是在getDataInBackgroundWithBlock中展开而不是选择完成处理程序将不起作用。它们必须是可选的,然后在块中展开。Ingouackaz完全错过了for循环,但他的getDataInBackgroundWithBlock调用是正确的。
我的第一次尝试充其量是草率的,我可能是受挫了。对于刚刚开始的用户,在数据查询之前的查询将使用一个PFObject数组完成。因此,您需要遍历该数组,对每个项调用getDataInBackgroundWithBlock
而不是object["questionImage"]我可能会使用object.valueForKey("questionImage")只是为了使它更明确。我还将键字符串"questionImage"作为常量存储在键文件中,这样就不必担心输入错误。
我不确定PDF文件和解析。从那以后我就没试过。但现在我很好奇,因为如果可能的话,这会再一次让我的工作更轻松。我会更新一次,我再试一次。

最佳答案

这应该适用于Swift 1.2

file.getDataInBackgroundWithBlock({
                (imageData: NSData?, error: NSError?) -> Void in
                if (error == nil) {
                    let image = UIImage(data:imageData!)
                    println(image)
                }

            })

关于ios - 解析文件查询和Swift 1.2错误-getDataInBackgroundWithBlock,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/29600588/

10-13 03:51