No se puede usar reloadData de otra class.

Tengo 2 classs, classA y classB. En classA tengo una vista de tabla que funciona y se actualiza a pedido. todos los delegates y datados están bien y también hay una propiedad @property (nonatomic, retain) UITableView *myTableView;

No quiero poner reloadData en viewDidAppear o viewWillAppear de classA. Quiero disparar [myTable reloadData] de classB.

Gracias

Use delegates para volver a cargar su vista de tabla.

En la class donde está la vista de tabla, escribe esto en viewDidLoad:

 [[NSNotificationCenter defaultCenter] removeObserver:self name:@"updateLeftTable" object:nil]; [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(checkRes:) name:@"updateLeftTable" object:nil]; 

Luego en la misma class implementa su function así:

 -(void)checkRes:(NSNotification *)notification { if ([[notification name] isEqualToString:@"updateLeftTable"]) { [_rearTableView reloadData]; } } 

Finalmente, en la class desde donde desea recargar su tableview, pegue la siguiente línea (es importante que esta línea vaya al método desde donde desea recargar su vista de tabla):

 [[NSNotificationCenter defaultCenter] postNotificationName:@"updateLeftTable" object:self]; 

Dime si tienes algún problema.

Cuando llama a classA * test = [[classA alloc] init]; , crea un nuevo object de tu class A y tiene un valor nulo para cada variable que declaras en esta class. Es por eso que su reloaddata no se llama porque su matriz tiene un valor nulo para este object que está utilizando para volver a cargar la tabla.

Debe usar el delegado para pasar el object de la class A a la class B. Luego, intente volver a cargar la tabla desde este object delegado.

  ClassB.h @protocol ClassBDelegate <NSObject> -(void)reloadTableView; @end @property (nonatomic,weak)id<ClassBDelegate>delegate; ClassB.m -(void)methodForReloadingTableViewInClassA { [self.delegate reloadTableView]; } Class Ah #import ClassB.h @interface ClassA : UITableViewController<UITableViewDelegate,UITableViewDatasource,ClassBDelegate> { } ClassA.m -(void)createClassB { ClassB *obj = [[ClassB alloc]init]; obj.delegate = self; } //delagte method of class B -(void)reloadTableView { [self.tableView reloadData]; } 

de la documentation :

Para la eficiencia, la vista de tabla vuelve a mostrar solo aquellas filas que son visibles.

así que si tu tableView no está visible, no se actualizará.

Llamar al método reloadData actualiza los datos tan pronto como se llama al método. Asegúrese de que la fuente de datos (array o dictionary o donde haya guardado los valores) se cambie antes de llamar a reloadData.

Y debería intentar volver a cargar los datos en el hilo principal: [tableView performSelectorOnMainThread: @selector (reloadData) withObject: nil waitUntilDone: NO];

Creo que deberías volver a cargarlo por los delegates.

Aquí tu ClassB.h Aquí tienes que agregar a tu delegado

 @property (nonatomic, strong) id myDelegate; 

Aquí su ClassA.m Cuando vaya a ClassB, muestre a su delegado t 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]; 

Siguiente. Cuando quieras volver a cargar tu classA tableView utiliza el código como este:

 if (myDelegate && [myDelegate respondsToSelector:@selector(reloadMyTV)]){ [myDelegate performSelector:@selector(reloadMyTV) withObject:nil]; } 

donde "reloadMyTV" es un método de ClassA:

 -(void) reloadMyTV { [myTableView reloadData]; } 

Espero recordar delegates lo suficientemente buenos) Lo escribí por memory)) Espero que te ayude

verifique que su propiedad UITableView sea ​​válida al momento de llamar a reloadData . UIViewController se crea llamando a alloc init , pero su vista está actualmente en estado no válido. Establezca el punto de interrupción en la línea de código de recarga y verifique si usted es .tableView == nil?