JavaScriptなどではアラートは同期処理になりますが、Objective-Cでは非同期処理になります。(デリゲートで処理するため)
ただ、場合によっては同期的に処理をしたい場合があるので、どうするかのメモです。
※ちなみに、viewDidLoad
内でやっちゃうとちゃんとviewの描画処理が終わらなくなるのでうまく動きません。慣れてる人はそんなミスしないんだと思いますが、さっと処理を書いたらうまく動かなくてハマりました。
##NSRunLoop
を使って同期処理にする
@property (assign, nonatomic) BOOL finished;
- (void)anyMethod
{
UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"TItle"
message:@"message"
delegate:self
cancelButtonTitle:@"cancel"
otherButtonTitles:@"other", nil];
[alert show];
self.finished = NO;
while(!self.finished) {
[[NSRunLoop currentRunLoop] runUntilDate:[NSDate dateWithTimeIntervalSinceNow:0.5]];
}
NSLog(@"OK!");
}
- (void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(UIInteger)buttonIndex
{
self.finished = YES;
}