Array retuning a blank array outside of PFQuery with Parse.

前端 未结 3 466
难免孤独
难免孤独 2021-01-27 22:42

Array returning a blank array when outside of the PFQuery. For some reason, the items are not being passed to the array when compiled.

class DriverViewController         


        
相关标签:
3条回答
  • 2021-01-27 23:14

    Logan's answer is right in the money.

    See my answer in this thread: Storing values in completionHandlers - Swift

    I wrote up a detailed description of how async completion handlers work, and in the comments there is a link to a working example project the illustrates it.

    0 讨论(0)
  • 2021-01-27 23:21

    This a very common misunderstanding relating to threading, the issue is what order events run:

    // Runs 1st
    query.findObjectsInBackgroundWithBlock {
        (objects: [AnyObject]?, error: NSError?) -> Void in
        // Runs 3rd
    }
    // Runs 2nd
    println(placesArr)
    

    The execution of the program doesn't halt when you call findObjectsInBackground, it finds objects: inBackground which means the heavy lifting of a network request is dispatched to a different queue so that the user can still interact with the screen. A simple way to do this would be to do:

    var placesArray: [Place] = [] {
        didSet {
            // Do any execution that needs to wait for places array here.
        }
    }
    

    You can also trigger subsequent actions within the parse response block, I just personally find executing behavior dependent on a property update being executed in didSet to be a nice way to control flow.

    0 讨论(0)
  • 2021-01-27 23:28

    query.findObjectsInBackgroundWithBlock is a block operation that performs in the background - it's asynchronous.

    The line println(placesArr) actually executes before the block is finished - that's why you see nil there.

    0 讨论(0)
提交回复
热议问题