登录iPhone应用程序后重新加载数据
我有一个登录,它是在mainApp的viewDidLoad上启动的。这意味着主应用程序中的numberOfRowsInSection在登录之前运行,并且结果mytableview未被填充 我在视图中有我的JsonArray将出现在主应用程序中的重新加载数据功能,以使numberOfRowsInSection在登录后运行。所以我说:登录iPhone应用程序后重新加载数据,iphone,ios,uitableview,login,reloaddata,Iphone,Ios,Uitableview,Login,Reloaddata,我有一个登录,它是在mainApp的viewDidLoad上启动的。这意味着主应用程序中的numberOfRowsInSection在登录之前运行,并且结果mytableview未被填充 我在视图中有我的JsonArray将出现在主应用程序中的重新加载数据功能,以使numberOfRowsInSection在登录后运行。所以我说: [self.tableView reloadData]; …将出现在视图中。但这不会使它在登录后运行 有什么建议吗 提前谢谢 代码更新 登录页面 i
[self.tableView reloadData];
…将出现在视图中。但这不会使它在登录后运行
有什么建议吗
提前谢谢
代码更新
登录页面
if (serverOutput != nil) {
//UIAlertView *alertSuccess = [[UIAlertView alloc] initWithTitle:@"Congrats" message:@"You are authorised" delegate:self cancelButtonTitle:@"OK" otherButtonTitles:nil, nil];
//[alertSuccess show];
//[alertSuccess release];
LucentaAppDelegate *appDelegate = (LucentaAppDelegate *)[[UIApplication sharedApplication] delegate];
appDelegate.userProducts = serverOutput;
loginButton.enabled = FALSE;
[self dismissModalViewControllerAnimated:YES];
主视图
- (void)viewWillAppear:(BOOL)animated {
[super viewWillAppear:animated];
LucentaAppDelegate *appDelegate = (LucentaAppDelegate *)[[UIApplication sharedApplication] delegate];
self.jsonArray = [appDelegate.userProducts JSONValue];
//[self.tableView reloadData];
[self performSelector:(@selector(refreshDisplay:)) withObject:(tableView) afterDelay:0.5];
UIAlertView *alert = [[UIAlertView alloc]initWithTitle:@"Test Alert" message:@"View Will Appear." delegate:self cancelButtonTitle:@"Cancel" otherButtonTitles: nil];
[alert show];
[alert release]; }
-(void)refreshDisplay:(UITableView *)tableView {
[self.tableView reloadData];}
这取决于应用程序的实际代码。我建议用这样的方法
- (void)loginSucceeded {
[self.tableView reloadData];
}
连接到视图控制器,并在登录成功后调用它。这也很方便,因为在这种情况下,当您的应用程序增长时,您可能需要执行一些更复杂的操作。当您的登录(从viewWillLoad
开始)完成时,您应该会收到一些代理回叫,告诉您您的请求已完成。创建请求时,通常指定委托
如果您使用的是NSURLRequest和NSURLConnection
,则将在以下其中一种中指定代理:
+ connectionWithRequest:delegate:
– initWithRequest:delegate:
– initWithRequest:delegate:startImmediately:
根据您创建请求的方式,要覆盖的委托回调是connectiondFinishLoading:
(或connection:didFailWithError:
,以防通信错误)
connectiondFinishLoading:
是您应该发布[self.tableView reloadData]的正确位置更新表数据源后的代码>
如果未使用NSURLRequest
,则代理回调将不同
编辑:
如果您的mainView
接收到它需要的JSon数据,您应该在那里做的是更新表数据源并调用表上的reloadData
实际上,调用reloadData
将强制再次调用numberofrowsinssection
,但此信息是由您的数据源提供的,因此,如果它没有更新以反映您收到的新数据,它将始终反映旧值
能否提供有关数据源的更多信息?您如何知道登录过程何时完成?是否存在回调或委托方法?如果是这样,请将重新加载命令放在那里。登录过程完成后,登录modalviewcontroller将消失并显示mainView。看起来很像您以前的扩展问题!我应该在我的登录页面中像在mainView中那样做吗?所以我应该在登录页面中成功登录后调用它?在数据准备好显示在表视图中时调用它。是的,在成功登录后再显示主视图。酷。。。如何在登录页面中引用mainView中的tableview以使tableview重新加载数据?谢谢。Sergio,成功登录后。它将取消登录模式,并向mainView发送JSON数组以填充tableview。但是,由于mainView中的numberOfRowsInSection在登录页面之前已经运行,我想重新加载数据以填充mainView中的tableView。。。看来我已经弄明白了。如果有什么问题,我会告诉你的。谢谢