无法使用来自其他类的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?