Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/118.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
Ios UITableView在重新加载数据时不重新加载_Ios_Uitableview_Uibutton_Viewdidload_Reloaddata - Fatal编程技术网

Ios UITableView在重新加载数据时不重新加载

Ios UITableView在重新加载数据时不重新加载,ios,uitableview,uibutton,viewdidload,reloaddata,Ios,Uitableview,Uibutton,Viewdidload,Reloaddata,我有两种观点。第一个具有UITableView,它可以完美地加载,而且如果我单击通过didSelectRowAtIndexPath触发的注销方法,它也可以完美地工作 对于登录,我有另一个视图,它作为登录的模式视图加载在顶部。登录返回成功后,我希望它从第一个视图刷新UITableView上的菜单。不幸的是,这不起作用 MenuVC.h 以上所有代码都可以工作,只有这里出现了问题,当我单击loginClicked并调用refreshMenu时,它正在执行[self-viewDidLoad],而不是[

我有两种观点。第一个具有UITableView,它可以完美地加载,而且如果我单击通过didSelectRowAtIndexPath触发的注销方法,它也可以完美地工作

对于登录,我有另一个视图,它作为登录的模式视图加载在顶部。登录返回成功后,我希望它从第一个视图刷新UITableView上的菜单。不幸的是,这不起作用

MenuVC.h

以上所有代码都可以工作,只有这里出现了问题,当我单击loginClicked并调用refreshMenu时,它正在执行[self-viewDidLoad],而不是[self.mainNavigation reloadData];从刷新菜单方法

罗森维克酒店

首先: 你不叫你自己是viewDidLoad。所以,请在refreshMenu中删除它,如果您需要放入viewDidLoad中的其他代码,请将其转换为将在viewDidLoad中调用并且也可以在refreshMenu中调用的方法

问题是您已经创建了一个对象MenuVC。在LoginVC.m中执行MenuVC*MenuViewController=[[MenuVC alloc]init];这是一个全新的物体。它甚至不在屏幕上。这不是前一个的同一个对象。如果你怀疑,检查他们的指示

如果我理解正确,您的MenuVC对象是LoginVC对象的所有者

因此,可以使用的解决方案是委托模式。 这里有一个你可以适应的建议

在LoginVC.h中

@protocol LoginVCDelegate < NSObject >
-(void)didLoginWithSuccess:(BOOL)success;
@end
@property (nonatomic, week) id < LoginVCDelegate > loginDelegate;
在MenuVC.h

@interface MenuVC : UIViewController< UITableViewDelegate, UITableViewDataSource, LoginVCDelegate >
此外,在MenuVC.m中创建LoginVC时:

[loginVC setLoginVCDelegate:self];

嗯,首先,你不应该打电话给[self-viewDidLoad];然后,你做了MenuVC的初始化。这与前一个对象是否相同?是否设置了tableview或数据源的委托?删除[self-viewDidLoad];在menurefresh方法中,不要在实现类中的用户定义方法中的任何位置调用viewDidload。在alloc之后,不要调用[MenuViewController refreshMenu],而是调用该方法[self.mainNavigation reloadData];在MenuVC.mI的viewDidLoad中添加了一些代码,只是为了澄清问题,希望这能帮助我解决这个问题@Larme,如果我删除它,当我点击DidSelectRowatineXpath时,注销就不再起作用了。马卡雷特,是的,我做了。用户2071152,这似乎不起作用。
@protocol LoginVCDelegate < NSObject >
-(void)didLoginWithSuccess:(BOOL)success;
@end
@property (nonatomic, week) id < LoginVCDelegate > loginDelegate;
if ([_loginDelegate respondsToSelector:@selector(didLoginWithSuccess:)])
    [_loginDelegate didLoginWithSuccess:theBooleanYouWant];
@interface MenuVC : UIViewController< UITableViewDelegate, UITableViewDataSource, LoginVCDelegate >
-(void)didLoginWithSuccess:(BOOl)success
{
    [self refreshMenu];
    //Note that you could check if login succeed or not by checking the success boolean.
}
[loginVC setLoginVCDelegate:self];