2014-12-27 314 views
0
ChangePasswordPage *vc = [self.storyboard instantiateViewControllerWithIdentifier:@"changedPass5"]; 
[self presentViewController:vc animated:YES completion:nil]; 

如果我把在viewDidLoad這段代碼會工作,但是當我在一個函數運行它,它仍然有效,但10至15秒,白色的屏幕,然後經過屏幕正確加載。presentViewController顯示白屏10-15第二

這是爲什麼?

下面是一些相關的代碼: 添加這個方法:使用presentViewController

FIX的

dispatch_queue_t queue = dispatch_queue_create("x.x", NULL); 
dispatch_async(queue, ^{ 

    while(true) 
    { 
     sleep(1); 
     checkCacheForRefreshDone = [[NSUserDefaults standardUserDefaults] stringForKey:@"homeScreenRefreshDone"]; 
     userChangedPassword = [[NSUserDefaults standardUserDefaults] stringForKey:@"userChangedPassword"]; 


     if ([checkCacheForRefreshDone isEqualToString:@"1"]) 
     { 
      [self installAfterRefresh];  
      [feedHomeTable reloadData]; 
      [[NSUserDefaults standardUserDefaults] setObject:@"0" forKey:@"homeScreenRefreshDone"]; 
      [[NSUserDefaults standardUserDefaults] synchronize]; 
      checkCacheForRefreshDone = @"0"; 
      [refresh endRefreshing]; 
      break; 
     } 

    } 

}); 


-(void)installAfterRefresh 
{ 

    userChangedPassword = [[NSUserDefaults standardUserDefaults] stringForKey:@"userChangedPassword"]; 

    if ([userChangedPassword isEqualToString:@"1"]) 
    { 
     [self detectPhone]; 
    } 
} 

detectPhone功能

[self performSelectorOnMainThread:@selector(detectPhone) withObject:nil waitUntilDone:YES]; 
+1

也許你沒有在主線程上做。你調用了什麼函數,什麼叫_that_函數? – jrturton 2014-12-27 14:44:21

+0

是的,我使用'dispatch_async' – 2014-12-27 14:45:54

+0

那可能就是這樣。你能用這個代碼更新問題嗎? – jrturton 2014-12-27 14:49:48

回答

2

嘗試編寫代碼,而不self.storyboard。

變化:

ChangePasswordPage *vc = [self.storyboard instantiateViewControllerWithIdentifier:@"changedPass5"]; 
[self presentViewController:vc animated:YES completion:nil]; 

爲:

UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"Main" bundle:nil]; 
ChangePasswordPage *vc = [storyboard instantiateViewControllerWithIdentifier:@"changedPass5"]; 
[self presentViewController:vc animated:YES completion:nil]; 
0

你調用從後臺線程的方法。影響UI的所有調用都必須在主線程上完成 - 在動畫或演示文稿之前有一段很長的延遲是一個告警信號,指出某個方法位於錯誤的線程中。使用dispatch_async將代碼調用回主線程。