2

スプラッシュ画面を書いています。スプラッシュ画面はサーバーに接続し、いくつかのデータを受信します。データが正常に受信されたら、プログラムで次のビューコントローラーに移動します。どうすればこれを達成できますか?ボタンクリックと同じではありませんか?LoadingViewContrllerのviewDidLoadにコードを配置しても、次の画面に転送されないためです。

TableViewController *tvc = [[TableViewController alloc] init];
tvc.modalTransitionStyle = UIModalTransitionStyleCrossDissolve;
[self presentModalViewController:tvc animated:NO];

すべてのデータが取得された後、TableViewContrllerに自動的にジャンプしたいと思います。

以下は、ネットワークからデータを取得するときのコードです。

- (void)fetchedData:(NSData *)responseData {
if(responseData == nil){
    [ErrorViewController showError];
}else{
 //methods to start parsing and adding json into array
if(delegate){
    [delegate jsonReceivedData:array]; 

//codes to go to next screen should be here
}
}
4

1 に答える 1

2

さて、これを行う方法は簡単です。アプリの最初の画面をスプラッシュ画面と同じにします。次のように、おそらくviewWillAppearでNSTimerを宣言してインスタンス化します。

mainTimer = [NSTimer scheduledTimerWithTimeInterval:1 target:self selector:@selector(updateTime) userInfo:nil repeats:YES];

次に、BOOLをインスタンス化します。

- (void)fetchedData:(NSData *)responseData {
if(responseData == nil){
    [ErrorViewController showError];
}else{
 //methods to start parsing and adding json into array
if(delegate){
    [delegate jsonReceivedData:array]; 

    myBool = YES;
}
}

タイマーがアクセスするメソッド(この場合は「updateTime」)で、次の手順を実行します。

-(void)updateTime{
    if(myBool){
        [mainTimer invalidate];
        MyViewController *vC = [[MyViewController alloc] init];
        //pass vC information, now that it has been initialized
        //or pass information to a singleton, from which vC can retrieve it
        // (I can show you how to do that, too, if need be)
        //I will assume you are using a navigationController
        [self.navigationController pushViewController:vC animated:YES];
    }
}

mainTimerスペースの都合上、との宣言は省略していmyBoolます。

于 2012-04-12T13:53:39.800 に答える