Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/iphone/44.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
登录iPhone应用程序后重新加载数据_Iphone_Ios_Uitableview_Login_Reloaddata - Fatal编程技术网

登录iPhone应用程序后重新加载数据

登录iPhone应用程序后重新加载数据,iphone,ios,uitableview,login,reloaddata,Iphone,Ios,Uitableview,Login,Reloaddata,我有一个登录,它是在mainApp的viewDidLoad上启动的。这意味着主应用程序中的numberOfRowsInSection在登录之前运行,并且结果mytableview未被填充 我在视图中有我的JsonArray将出现在主应用程序中的重新加载数据功能,以使numberOfRowsInSection在登录后运行。所以我说: [self.tableView reloadData]; …将出现在视图中。但这不会使它在登录后运行 有什么建议吗 提前谢谢 代码更新 登录页面 i

我有一个登录,它是在mainApp的viewDidLoad上启动的。这意味着主应用程序中的numberOfRowsInSection登录之前运行,并且结果mytableview未被填充

我在视图中有我的JsonArray将出现在主应用程序中的重新加载数据功能,以使numberOfRowsInSection登录后运行。所以我说:

    [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。。。看来我已经弄明白了。如果有什么问题,我会告诉你的。谢谢