iOS: cellFowRow no llamado para UITableView contenido en UICollectionView

Mi aplicación contiene un UICollectionView, en el que cada celda contiene una UITableView. El método de número de filas de la vista de tabla se llama correctamente, pero el método cellForRow nunca se llama. Aquí está el código relevante:

Configuración de las vistas de la tabla (en la vista se cargó):

[self.collectionView registerNib:[UINib nibWithNibName:@"OrganizationCollectionCell" bundle:nil] forCellWithReuseIdentifier:@"OrganizationCollectionCell"]; tableViews = [[NSMutableArray alloc] initWithCapacity:recipOrgs.count]; for (NSDictionary *orgDict in recipOrgs) { int index = [recipOrgs indexOfObject:orgDict]; OrganizationTableView *tableView = [[OrganizationTableView alloc] initWithFrame:collectionView.frame]; tableView.index=index; tableView.parentCon=self; tableView.dataSource=tableView; tableView.delegate=tableView; [tableViews addObject:tableView]; } 

CellForItem de CollectionView:

 -(UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath{ NSLog(@"cellForItem CollectionView"); OrganizationCollectionCell *cell = [collectionView dequeueReusableCellWithReuseIdentifier:@"OrganizationCollectionCell" forIndexPath:indexPath]; if (cell==nil) { NSArray *objects = [[NSBundle mainBundle] loadNibNamed:@"OrganizationCollectionCell" owner:self options:nil]; cell = [objects objectAtIndex:0]; } OrganizationTableView *tv = [tableViews objectAtIndex:indexPath.row]; if (tv.orgAlerts==nil) { [tv getAlerts]; } cell.tableView=tv; cell.tableView.frame=collectionView.frame; NSLog(@"%f %f",cell.tableView.frame.size.height,cell.tableView.frame.size.height); return cell; } 

El método "getAlerts":

 -(void)getAlerts{ orgAlerts = [[NSArray alloc] init]; NSString *orgID = [[parentCon.recipOrgs objectAtIndex:index] objectForKey:@"id"]; [[EDAPIStore shanetworkingStore] getAlertsForOrganizationWithID:orgID WithCompletion:^(NSArray *alerts, NSError *error) { if (alerts) { orgAlerts = alerts; [self reloadData]; }else{ NSLog(@"%@",error.localizedDescription); } }]; } 

OrganizationTableView's numberOfRowsMethod:

 -(NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section{ NSLog(@"number of rows"); NSLog(@"orgAlerts.count: %d",orgAlerts.count); if (orgAlerts.count==0) { return 1; }else{ return orgAlerts.count; } 

He verificado que numberOfRows está devolviendo el número correcto (alnetworkingedor de 30), pero el método cellForRow nunca se llama. La celda de colección y la celda de vista de tabla se definen en su propio xib.

En lugar de configurar las vistas de tabla ' dataSource y delegate en la vista viewDidLoad del controller de viewDidLoad , dentro de su collectionView:cellForItemAtIndexPath: método, obtenga una reference a UITableView en UICollectionViewCell , configure su dataSource y delegate allí. Esta parece ser la forma de hacerlo en iOS para cualquier vista con un delegado y se coloca dentro de una UITableViewCell o una UICollectionViewCell . Entonces, si te encuentras construyendo formularios usando UITableViewController donde tienes UITextField s dentro de UITableView , establece los delegates de campo de text dentro del método cellForRowAtIndexPath:

También puedo agregar que probablemente sea muy caro en la memory mantener una fuerte reference a todos los UITableView s en sus celdas de vista de colección. La vista de su colección podría estar reutilizando una celda de vista de colección "prototipo" que se ha personalizado para tener una UITableView dentro. Luego, en su controller de vista, mantenga una NSArray bidimensional como la fuente de datos de la vista de colección. La primera dimensión es para la vista de la colección y la segunda es la fuente de datos de cada vista de tabla.