現在、次のコードを使用してビュー間の遷移をアニメーション化しています。refreshTheServers
その間にメソッドが呼び出されると、アプリケーション全体がフリーズし、サーバーが更新され、ビューが表示されます。
ビューがロードされてからサーバーが更新されるシームレスなプロセスにするにはどうすればよいですか?
[UIView beginAnimations:nil context:nil];
[UIView setAnimationDuration:0.5];
[UIView setAnimationTransition:UIViewAnimationTransitionCurlUp forView:self.view cache:NO];
[self.view addSubview:self.folderView];
[UIView commitAnimations];
[self refreshTheServers];
編集: refreshTheServers メソッドのコードは次のとおりです。
- (void)refreshTheServers {
KeychainItemWrapper* keychain = [[KeychainItemWrapper alloc] initWithIdentifier:@"KeychainTest" accessGroup:nil];
NSString *userForConnect = [NSString stringWithFormat:@"%@", [keychain objectForKey:(__bridge id)(kSecAttrAccount)]];
NSString *passForConnect = [NSString stringWithFormat:@"%@", [keychain objectForKey:(__bridge id)(kSecValueData)]];
CTCoreAccount *account = [[CTCoreAccount alloc] init];
dispatch_queue_t taskQ = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);
dispatch_async(taskQ, ^{
[account connectToServer:[[NSUserDefaults standardUserDefaults]
stringForKey:@"server"]
port:993
connectionType:CTConnectionTypeTLS
authType:CTImapAuthTypePlain
login:userForConnect
password:passForConnect];
dispatch_async(dispatch_get_main_queue(), ^{
// ... the thread is over, do stuff on the main thread ...
CTCoreFolder *inbox = [account folderWithPath:theAppDelegate.folder];
NSArray *inboxMessages = [inbox messagesFromUID:1 to:0 withFetchAttributes:CTFetchAttrEnvelope];
[[self allMessages] removeAllObjects];
[[self allMessages] addObjectsFromArray:inboxMessages];
[self.messagesTable reloadData];
});
});
}
私は何を間違っていますか?