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) {
// メインスレッドに戻ってきた時に行う処理
}