2011-11-29 54 views
1

我正在實現一個簡單的警報視圖,並在應用程序執行數據庫還原時向用戶顯示活動指示器。一切都很好,除非我看不到警報視圖,除非我註釋掉自動解僱行(這裏是最後一行)。除非我註釋掉自動解除,否則看不到我的alertView

好吧,數據庫的還原是相當快的,但我仍然期望看到它,即使是瞬間的,不是?在動畫期間,我可以看到屏幕變得更暗,但這就是全部。我也嘗試了一個for循環來延長時間,時間延長但仍然沒有警報視圖。

警告視圖被調用的方式沒有錯,因爲如果我評論解僱,我可以看到它......只有永遠。任何人有一個想法嗎?

在任何人說出來之前,我試着改變alertView的代表爲self,發佈爲here,但它沒有幫助。

// First we prepare the activity indicator view to show progress indicator 
UIActivityIndicatorView * activityView = [[UIActivityIndicatorView alloc] initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleWhiteLarge]; 

[activityView setFrame:CGRectMake(121.0f, 50.0f, 37.0f, 37.0f)]; 
[activityView startAnimating]; 

// Then we put it in an alert view 
UIAlertView *alertView = [[UIAlertView alloc] initWithTitle:@"Loading" message:nil delegate:nil cancelButtonTitle:nil otherButtonTitles:nil]; 
[alertView addSubview:activityView]; 
[alertView show]; 

// Finally we operate the restore 
[[SQLManager sharedSQL] restoreDatabase:[restoreDatabaseURL path]]; 

// And we can dismiss the alert view with the progress indicator 
[alertView dismissWithClickedButtonIndex:0 animated:NO]; 

回答

2

林不知道爲什麼發生,但我遇到它偶爾也。我已經得到了這樣的工作的一種方法是通過下一次調用使用performSelector:withObject:afterDelay:,像這樣:

// First we prepare the activity indicator view to show progress indicator 
UIActivityIndicatorView * activityView = [[UIActivityIndicatorView alloc] initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleWhiteLarge]; 

[activityView setFrame:CGRectMake(121.0f, 50.0f, 37.0f, 37.0f)]; 
[activityView startAnimating]; 

// Then we put it in an alert view 
UIAlertView *alertView = [[UIAlertView alloc] initWithTitle:@"Loading" message:nil delegate:nil cancelButtonTitle:nil otherButtonTitles:nil]; 
[alertView addSubview:activityView]; 
[alertView show]; 

// Finally we operate the restore 
// [[SQLManager sharedSQL] restoreDatabase:[restoreDatabaseURL path]]; 
[[SQLManager sharedSQL] performSelector:@selector(restoreDatabase:) withObject:[restoreDatabaseURL path] afterDelay:0.25]; 


// And we can dismiss the alert view with the progress indicator 
[alertView dismissWithClickedButtonIndex:0 animated:NO]; 

performSelector Documentation

+0

謝謝,我會盡快嘗試這個,只要我回家,讓你知道它是否有效。 –

+0

所以,我試了一下,但沒有奏效,仍然沒有警覺。然後,我嘗試了其他方法,使用解除方法本身...並且工作正常!我可以看到延遲,如果使用:[alertView performSelector:@selector(dismissWithClickedButtonIndex:animated :) withObject:nil afterDelay:2.0];'。我想知道我是否可能不在主線上?必須做其他測試,但謝謝你的建議! –

+0

@F np,並且你肯定在主線程中,否則UI調用將全部失敗。 – chown

1

聽起來像它本身解僱幾乎瞬間。如果你添加一個for循環,它可能會凍結所有其他的計算,這意味着你的活動視圖不會顯示直到循環中斷。

您可以嘗試使用NSTimer調用另一個函數來確定還原是否完成;

// Setup our the timer 
NSTimer *timer = [NSTimer scheduledTimerWithTimeInterval:1.0 
                target:self 
               selector:@selector(checkRestore) 
               userInfo:nil 
               repeats:YES]; 


// Timer function checking for completion 
-(void)checkRestore { 
    if (restore is complete) { 
     [alertView dismissWithClickedButtonIndex:0 animated:NO]; 
    } 
} 
+0

謝謝,我會盡可能地嘗試這一點。會讓你知道。 –

+0

其實我沒有注意到你的代碼的含義,基於我目前的設計,我不能使用它,因爲我應該重寫還原數據庫功能。如果真的沒有其他的工作,我會用這個。無論如何,我相信這會起作用,謝謝。 –

相關問題