2012-04-11 82 views
2

我在写一个启动画面。启动画面将连接到服务器并接收一些数据。当数据成功接收后,我想以编程方式转到下一个viewcontrller。我怎样才能做到这一点?它与按钮点击不一样?因为即使将代码放入我的LoadingViewContrller的viewDidLoad中,我也不会转发到下一个屏幕。在Xcode中的viewControllers之间切换

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 
} 
} 
+0

您是否有办法检查所有数据何时被检索?如果是这样,请发布该代码,我会告诉你如何去做。 – AMayes 2012-04-11 15:54:05

+0

@Amayes我编辑了代码 – Hexark 2012-04-12 01:47:09

回答

2

好的,这样做很简单。使您的应用的第一个屏幕与启动屏幕相同。声明并实例一个NSTimer,可能在viewWillAppear中,像这样:

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; 
} 
} 

在你的计时器访问的方法(在这种情况下,“更新时间”),请执行下列操作:

-(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]; 
    } 
} 

对于空间的缘故,我要离开了的mainTimermyBool的声明。

+0

假设“启动画面”是指应用程序的初始屏幕。 – AMayes 2012-04-12 15:24:25