无法使用来自其他类的reloadData
我有2个类,classA和classB在classA中,我有一个可以按需工作和刷新的tableview。 所有委托和数据源都很好,还有一个属性@property (nonatomic, retain) UITableView *myTableView;
我不想将reloadData
放在classA的viewDidAppear或viewWillAppear中。 我想从classB解雇[myTable reloadData]
。
谢谢
使用委托重新加载您的tableview。
在tableview所在的类中,在viewDidLoad中写入:
[[NSNotificationCenter defaultCenter] removeObserver:self name:@"updateLeftTable" object:nil]; [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(checkRes:) name:@"updateLeftTable" object:nil];
然后在同一个类中实现它的function如下:
-(void)checkRes:(NSNotification *)notification { if ([[notification name] isEqualToString:@"updateLeftTable"]) { [_rearTableView reloadData]; } }
最后,在您要重新加载tableview的类中粘贴以下行(重要的是此行将在您要重新加载tableview的方法中):
[[NSNotificationCenter defaultCenter] postNotificationName:@"updateLeftTable" object:self];
如果您有任何问题,请告诉我。
当你调用classA * test = [[classA alloc] init]时; ,它会创建A类的新对象,并且对于您在此类中声明的每个变量,它都具有nil值。 这就是为什么你的reloaddata不被称为becoz你的数组对于你用来重新加载表的这个对象有nil值。
您必须使用委托将类A的对象传递给类B.然后尝试从此委托对象重新加载表。
ClassB.h @protocol ClassBDelegate -(void)reloadTableView; @end @property (nonatomic,weak)iddelegate; ClassB.m -(void)methodForReloadingTableViewInClassA { [self.delegate reloadTableView]; } Class Ah #import ClassB.h @interface ClassA : UITableViewController { } ClassA.m -(void)createClassB { ClassB *obj = [[ClassB alloc]init]; obj.delegate = self; } //delagte method of class B -(void)reloadTableView { [self.tableView reloadData]; }
从文件 :
为了提高效率,表视图仅重新显示可见的行。
因此,如果您的tableView
不可见,那么它将不会更新。
调用方法后,调用reloadData方法会刷新数据。 在调用reloadData之前,请确保更改了数据源(数组或字典或保存值的位置)。
你应该尝试重新加载主线程上的数据:[tableView performSelectorOnMainThread:@selector(reloadData)withObject:nil waitUntilDone:NO];
我想你应该由代表重新加载它。
这里你的ClassB.h在这里你需要添加你的委托
@property (nonatomic, strong) id myDelegate;
在这里你的ClassA.m当你要去ClassB时,他的代表是ClassA
ClassB *goNext = [[ClassB alloc] initWithNibName:@"ClassB" bundle:nil]; goNext.myDelegate = self; // ALL YOUR BASE ARE BELONG TO US! [self.navigationController pushViewController:goNext animated:YES];
下一个。 当你想重新加载你的classA tableView时,使用如下代码:
if (myDelegate && [myDelegate respondsToSelector:@selector(reloadMyTV)]){ [myDelegate performSelector:@selector(reloadMyTV) withObject:nil]; }
其中“reloadMyTV”是ClassA的方法:
-(void) reloadMyTV { [myTableView reloadData]; }
希望我记得代表们足够好)我用记忆写的))希望它会有所帮助
check是您的UITableView
属性在您调用reloadData
有效。 UIViewController
是通过调用alloc init
创建的,但是您的视图当前处于无效状态。 在reloadData代码行中设置断点并检查你.tableView == nil?