completionHandlerを引数に取るCocoaの非同期メソッドを同期実行したい場合、あまりスマートな方法ではないですが、下記の例のようにすると同期実行できます。completionHandlerはメソッドを呼び出したスレッドと同じスレッドで実行されますので、run loopをまわさないでNSLockなどで同期しようとするとデッドロックになることに注意。
__block BOOL finished = NO;
[[NSWorkspace sharedWorkspace] recycleURLs:trashURLs
completionHandler:^(NSDictionary *newURLs, NSError *error) {
finished = YES;
}];
while(finished == NO) {
[[NSRunLoop currentRunLoop] runUntilDate:[NSDate dateWithTimeIntervalSinceNow:0.1]];
}
0 件のコメント:
コメントを投稿