Вот несколько примеров кода, который может помочь вам. Неясно, как бы вы ограничили код (PRE-BACKGROUND CODE) для запуска только при завершении фоновой обработки. Возможно, вы захотите вставить какой-либо код в функцию ответа уведомления либо для подтверждения того, что этот ПРЕДВАРИТЕЛЬНЫЙ КОДЕКС завершен, либо для его завершения.
// ParseTestViewController.swift
import UIKit
import Foundation
import Parse
class ParseTestViewController: UIViewController {
var userData = [String]()
func codeToExecuteBeforeStringsAreAppended() {
}
func codeToExecuteAfterStringsAreAppended() {
// can use the array 'userData'
}
override func viewDidLoad() {
NSNotificationCenter.defaultCenter().addObserver(self,
selector: "notificationResponse:",
name: "recordsLoaded",
object: nil
)
self.getUserdataForUsername("MyName")
/* ==========================
Insert code tto be executed immediately after making the call that must not use the data returned by Parse. The function returns right away and the background may not have completed.
*/
codeToExecuteBeforeStringsAreAppended()
}
func getUserdataForUsername (queryUserName: String) {
var query = PFQuery(className:"UserData")
query.whereKey("username", equalTo: queryUserName)
let notification = NSNotification(name: "userDataRetrieved", object: self)
query.findObjectsInBackgroundWithBlock {
(objects: [AnyObject]?, error: NSError?) -> Void in
if error == nil {
for object in objects! {
if let username = object["username"] as? String {
self.userData.append (username)
}
}
} else {
// Log details of the failure
println("Error: \(error!) \(error!.userInfo!)")
}
NSNotificationCenter.defaultCenter().postNotification(notification)
}
}
func notificationResponse (notification: NSNotification) {
// this is executed after the background processing is done
// Insert the code that uses the data retrieved from Parse
codeToExecuteAfterStringsAreAppended()
NSNotificationCenter.defaultCenter().removeObserver(self)
}
}
Я хочу выполнить другой метод до тех пор, пока процесс backgound не завершится ... Запрос добавляет strimgs к массиву. Затем я хочу выполнить другой метод, но только до тех пор, пока не будут добавлены все строки! Ты знаешь, что я имею в виду? –
Я отредактировал свой ответ, чтобы включить конкретный пример. Обратите внимание, что он будет работать только так, как если бы вы использовали собственные объекты PFUser. Я все еще не уверен, хотите ли вы, чтобы какой-либо другой цикл работал во время выполнения запроса, а затем остановился, когда пользовательские имена готовы? Однако комментарий, добавленный ниже, предполагает, что вы вызываете некоторый код в цикле for, который не должен быть ... Но дайте мне знать, если вы все еще не уверены в том, как действовать. –