LoginSignup
1
1

More than 5 years have passed since last update.

GCDを使って複数のNCMBリクエストを実行し、メインスレッドに戻す方法

Last updated at Posted at 2017-05-24

mBaaSで、複数オブジェクト操作APIの提供終了に伴い、for文等で複数オブジェクト操作を行った際に、処理が完了した後にメインスレッドに戻す必要性が出てきました。
http://info.biz.nifty.com/mb/2017/03/api-2.html

今回は、GCDを利用してその処理を行ってみようと思います。

Objective-c

// 非同期処理のグループを作成
dispatch_group_t group = dispatch_group_create();

for (int i = 0; i < 5; i++) {
    // グループのカウントをひとつ増やす
    dispatch_group_enter(group);
    // testクラスのNCMBObjectを作成
    NCMBObject *object = [NCMBObject objectWithClassName:@"test"];
    // オブジェクトに値を設定
    [object setObject:@"value" forKey:@"key"];
    // データストアへの登録を実施
    [object saveInBackgroundWithBlock:^(NSError *error) {
        if (error){
            // 保存に失敗した場合の処理
        } else {
            // 保存に成功した場合の処理
        }
        // グループのカウントをひとつ減らす
        dispatch_group_leave(group);
    }];
}

// グループの処理が完了した時にメインスレッドでblocksを実行する
dispatch_group_notify(group, dispatch_get_main_queue(), ^{
    // メインスレッドに戻ってきた時に行う処理
});

Swift

// 非同期処理のグループを作成
let group = DispatchGroup()

for _ in 0..<5 {
    // グループのカウントをひとつ増やす
    group.enter()
    // testクラスのNCMBObjectを作成
    let object = NCMBObject.init(className: "test")
    // オブジェクトに値を設定
    object?.setObject("value", forKey: "key")
    // データストアへの登録を実施
    object?.saveInBackground({ (error) in
        if error != nil{
            // 保存に失敗した場合の処理
        } else {
            // 保存に成功した場合の処理
        }
        // グループのカウントをひとつ減らす
        group.leave()
    })

}
// グループの処理が完了した時にメインスレッドでblocksを実行する
group.notify(queue: DispatchQueue.main) {
    // メインスレッドに戻ってきた時に行う処理
}
1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1