聲明:在OSX開發中,我是初學者。運行後臺任務時的OSX警報
我有一個名爲「checkUser」的方法。在該方法中,我需要檢查輸入的用戶憑證是否有效。爲了檢查憑證是否有效,我需要調用一個名爲「methodThatInvolvesNetwork」的方法,其執行時間可能會有所不同,因爲它涉及網絡連接。在「checkUser」中,我需要顯示一個警報,顯示「methodThatInvolvesNetwork」正在運行時的進度。用戶也可以取消警報,這也將取消正在運行的「methodThatInvolvesNetwork」。 Q1)我應該怎麼做?
請注意,「checkUser」的執行被阻止,而「methodThatInvolvesNetwork」在「checkUser」中被調用是必須的。
我目前有此實現:
- (BOOL)checkUser
{
NSAlert *alert = [NSAlert alertWithMessageText:@"Sample" defaultButton:@"Okay" alternateButton:nil otherButton:nil informativeTextWithFormat:@""];
self.alert = alert;
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_HIGH, 0), ^{
[self methodThatInvolvesNetwork];
});
[alert runModal];
NSLog(@"After run modal");
}
- (void)methodThatInvolvesNetwork
{
// Do long running task here.
dispatch_async(dispatch_get_main_queue(), ^{
if (self.alert != nil)
{
[[self.alert window] orderOut:self.alert];
[[NSApplication sharedApplication] stopModal];
}
});
}
Q2)是我實現正確的方式去上面呢?
Q3)如果是,那麼爲什麼NSLog(@「After run modal」)在模態警報解除後很久才執行,而不是在模態警告解除後立即執行?
我需要警報被阻止,以便「checkUser」的返回值基於「methodThatInvolvesNetwork」。 – MiuMiu 2013-03-29 00:48:38