ChangePasswordPage *vc = [self.storyboard instantiateViewControllerWithIdentifier:@"changedPass5"];
[self presentViewController:vc animated:YES completion:nil];
如果我将此代码放在viewDidLoad
中它会起作用,但是当我在一个函数中运行它时,它仍然可以工作,但是在10-15秒后使用白色屏幕,然后屏幕正确加载。
为什么?
以下是一些相关代码:
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
使用presentViewController的功能
FIX: 添加此方法:
[self performSelectorOnMainThread:@selector(detectPhone) withObject:nil waitUntilDone:YES];
答案 0 :(得分: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];
答案 1 :(得分:0)
您正在从后台线程调用该方法。影响UI的所有调用必须在主线程上完成 - 在动画或表示之前的长时间延迟是方法在错误的线程上的迹象。
使用dispatch_async
将代码调回主线程。