pullData()の完了後にloadViews()を実行しようとしていますが、これを実行する最善の方法は何か疑問です。私はそれにも10秒のタイムアウトを設定したいので、可能であればネットワークエラーを表示することができます。私が読んだところから、GCDはこれを実現する方法のように見えますが、私はその実装について混乱しています。何か助けてくれてありがとう!別の関数が実行された後に1つの関数を実行する
//1
pullData()
//2
loadViews()
pullData()の完了後にloadViews()を実行しようとしていますが、これを実行する最善の方法は何か疑問です。私はそれにも10秒のタイムアウトを設定したいので、可能であればネットワークエラーを表示することができます。私が読んだところから、GCDはこれを実現する方法のように見えますが、私はその実装について混乱しています。何か助けてくれてありがとう!別の関数が実行された後に1つの関数を実行する
//1
pullData()
//2
loadViews()
あなたが完了ブロックで完了ハンドラで必要なもの。
1を作成することが本当に簡単その:
func firstTask(completion: (success: Bool) -> Void) {
// Do something
// Call completion, when finished, success or faliure
completion(success: true)
}
そして、このようなあなたの完了のブロックを使用します。
firstTask { (success) -> Void in
if success {
// do second task if success
secondTask()
}
}
私は、データが解析サーバから引き出された後のビューを初期化しなければならなかった似たような状況がありました。私は次のように使用:
func fetchQuestionBank(complete:()->()){
let userDefault = NSUserDefaults.standardUserDefaults()
let username = userDefault.valueForKey("user_email") as? String
var query = PFQuery(className:"QuestionBank")
query.whereKey("teacher", equalTo: username!)
query.findObjectsInBackgroundWithBlock { (objects:[AnyObject]?, error:NSError?) -> Void in
if error == nil {
if let objects = objects as? [PFObject] {
var questionTitle:String?
var options:NSArray?
for (index, object) in enumerate(objects) {
questionTitle = object["question_title"] as? String
options = object["options"] as? NSArray
var aQuestion = MultipleChoiceQuestion(questionTitle: questionTitle!, options: options!)
aQuestion.questionId = object.objectId!
InstantlyModel.sharedInstance.questionBank.append(aQuestion)
}
complete()
}
}else{
println(" Question Bank Error \(error) ")
}
}
}
をそして、これはあなたがメソッドを呼び出すです:
self.fetchQuestionBank({() ->() in
//Once all the data pulled from server. Show Teacher View.
self.teacherViewController = TeacherViewController(nibName: "TeacherViewController", bundle: nil)
self.view.addSubview(self.teacherViewController!.view)
})
あなたがこのように達成することができます: -
func demo(completion: (success: Bool) -> Void) {
// code goes here
completion(success: true)
}
あなたは、単に、おそらくべきコールバック/完了ブロックとしてloadViewsを渡して、pullDataがpullを完了したと判断するたびにcalData私はそれです。 – luk2302
どうすればいいですか?また、私がそのルートに行くと、私はまだタイマーを実装することができますか? – Opei
たとえば、「迅速完了ブロック」を検索すると、あなたの質問は一般に広すぎて、主に私のコメントのような意見に基づく回答を引き付けることになります。はるかに多くのコンテキストを示し、*正確に*達成したいことを説明しなければなりません。タイマーや完了後の実行はお互いの反対です。さらに、これまでに試したことを示す必要があります。 – luk2302