numberOfSections se llama? iOS

Omita toda esta información y omita la actualización en la parte inferior …

He tratado con selectores no reconocidos antes, pero no puedo entender qué está sucediendo esta vez. La stack de llamadas es opaca y no puedo descubrir de dónde proviene el problema. He intentado usar puntos de corte simbólicos y de exception. Este código funcionaba perfectamente antes … Regreso a trabajar en este progtwig un poco más y ahora me estoy topando con esto

[UITableViewSectionElement numberOfSections]: unrecognized selector sent to instance 0xa285d50 

Tengo dos UITableViews en este controller de vista. Uno de ellos está conectado en IB(datasource and delegate) . El segundo es instanciado en código y su fuente de datos / delegado también apunta al controller de vista. Puse una label de 2 en la segunda vista de tabla para distinguirlos entre sí. UITableViewTwo se agrega a una UIView que se devuelve como el pie de página de la primera tablaview si tengo datos válidos para mostrar. Una vez más, este código funcionaba perfectamente sin ningún tipo de lockings hace un time, y no puedo entender por qué se está estrellando ahora. Estoy usando ARC.

Aquí hay un código:

Cuando verifico cuál es la dirección del object al que se envía el selector: es de hecho un UITableViewSectionElement . ¿Por qué la H está recibiendo la llamada numberOfSections? ¿No se supone que es numberOfSectionsInTableView ?

 UITableView Delegate/DataSource methods -(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { if (tableView.tag == 0) { if (indexPath.row == 0) { PCFCustomNumberReviewsCell *cell = [self.tableViewOne dequeueReusableCellWithIdentifier:@"PCFNumberOfRatings"]; [cell.numberOfReviews setText:[NSString stringWithFormat:@"%d", numReviews.integerValue]]; [cell.numberOfReviews setFont:[PCFFontFactory droidSansFontWithSize:17]]; [cell.numberOfReviews setTextColor:[UIColor lightGrayColor]]; UIImageView *imgView = [[UIImageView alloc] initWithFrame:cell.frame]; [imgView setImage:[UIImage imageNamed:@"1slot2.png"]]; [cell setBackgroundView:imgView]; return cell; }else if(indexPath.row == 1) { PCFCustomReviewCell *cell = [self.tableViewOne dequeueReusableCellWithIdentifier:@"RateEasiness"]; [cell.stars setBackgroundImage:[self getImageForStars:[NSString stringWithFormat:@"%d", totalEasiness.integerValue]] forState:UIControlStateNormal]; UIImageView *imgView = [[UIImageView alloc] initWithFrame:cell.frame]; [imgView setImage:[UIImage imageNamed:@"1slot2.png"]]; [cell setBackgroundView:imgView]; return cell; }else if(indexPath.row == 2) { PCFCustomReviewCell *cell = [self.tableViewOne dequeueReusableCellWithIdentifier:@"RateUsefulness"]; [cell.stars setBackgroundImage:[self getImageForStars:[NSString stringWithFormat:@"%d", totalUsefulness.integerValue]] forState:UIControlStateNormal]; UIImageView *imgView = [[UIImageView alloc] initWithFrame:cell.frame]; [imgView setImage:[UIImage imageNamed:@"1slot2.png"]]; [cell setBackgroundView:imgView]; return cell; }else if(indexPath.row == 3) { PCFCustomReviewCell *cell = [self.tableViewOne dequeueReusableCellWithIdentifier:@"RateFunness"]; [cell.stars setBackgroundImage:[self getImageForStars:[NSString stringWithFormat:@"%d", totalFunness.integerValue]] forState:UIControlStateNormal]; UIImageView *imgView = [[UIImageView alloc] initWithFrame:cell.frame]; [imgView setImage:[UIImage imageNamed:@"1slot2.png"]]; [cell setBackgroundView:imgView]; return cell; }else if(indexPath.row == 4) { PCFCustomReviewCell *cell = [self.tableViewOne dequeueReusableCellWithIdentifier:@"RateInterestLevel"]; [cell.stars setBackgroundImage:[self getImageForStars:[NSString stringWithFormat:@"%d", totalInterestLevel.integerValue]] forState:UIControlStateNormal]; UIImageView *imgView = [[UIImageView alloc] initWithFrame:cell.frame]; [imgView setImage:[UIImage imageNamed:@"1slot2.png"]]; [cell setBackgroundView:imgView]; return cell; }else if(indexPath.row == 5) { PCFCustomReviewCell *cell = [self.tableViewOne dequeueReusableCellWithIdentifier:@"RateTexbookUse"]; [cell.stars setBackgroundImage:[self getImageForStars:[NSString stringWithFormat:@"%d", totalTextbookUse.integerValue]] forState:UIControlStateNormal]; UIImageView *imgView = [[UIImageView alloc] initWithFrame:cell.frame]; [imgView setImage:[UIImage imageNamed:@"1slot2.png"]]; [cell setBackgroundView:imgView]; return cell; }else if(indexPath.row == 6) { PCFCustomReviewCell *cell = [self.tableViewOne dequeueReusableCellWithIdentifier:@"RateOverall"]; [cell.stars setBackgroundImage:[self getImageForStars:[NSString stringWithFormat:@"%d", totalOverall.integerValue]] forState:UIControlStateNormal]; UIImageView *imgView = [[UIImageView alloc] initWithFrame:cell.frame]; [imgView setImage:[UIImage imageNamed:@"1slot2.png"]]; [cell setBackgroundView:imgView]; return cell; } }else { PCFCustomCourseCommentCell *cell = (PCFCustomCourseCommentCell *) [self.tableViewTwo dequeueReusableCellWithIdentifier:@"PCFCourseCommentCell"]; if (cell == nil) { NSArray *topLevelObjects = [[NSBundle mainBundle] loadNibNamed:@"PCFCustomCourseReviewCell" owner:self options:nil]; cell = [topLevelObjects objectAtIndex:0]; } UIImageView *imgView = [[UIImageView alloc] initWithFrame:cell.frame]; [imgView setImage:[UIImage imageNamed:@"1slot2.png"]]; [cell setBackgroundView:imgView]; PCFRateModel *rateObject = [courseReviews objectAtIndex:indexPath.section]; [cell.userName setText:rateObject.username]; [cell.date setText:rateObject.date]; [cell.professor setText:rateObject.course]; [cell.comment setText:rateObject.message]; [cell.term setText:rateObject.term]; for (UIView *view in cell.contentView.subviews) { if ([view isMemberOfClass:[UILabel class]]) { UILabel *tempLabel = (UILabel *)view; if ([tempLabel tag] != 0) { [tempLabel setFont:[PCFFontFactory droidSansFontWithSize:tempLabel.tag]]; } } } CGSize size = [rateObject.message sizeWithFont:[PCFFontFactory droidSansFontWithSize:11] constrainedToSize:CGSizeMake(290, 100000)]; [cell.comment setFrame:CGRectMake(cell.comment.frame.origin.x, cell.comment.frame.origin.y, size.width, size.height)]; [cell.comment setBaselineAdjustment:UIBaselineAdjustmentAlignBaselines]; [cell.comment setPrefernetworkingMaxLayoutWidth:290]; [cell.comment setLineBreakMode:NSLineBreakByWordWrapping]; [cell.starFunness setBackgroundImage:[self getImageForStars:rateObject.totalClarity] forState:UIControlStateNormal]; [cell.starEasiness setBackgroundImage:[self getImageForStars:rateObject.totalEasiness] forState:UIControlStateNormal]; [cell.starUsefulness setBackgroundImage:[self getImageForStars:rateObject.totalHelpfulness] forState:UIControlStateNormal]; [cell.starInterestLevel setBackgroundImage:[self getImageForStars:rateObject.totalInterestLevel] forState:UIControlStateNormal]; [cell.starOverall setBackgroundImage:[self getImageForStars:rateObject.totalOverall] forState:UIControlStateNormal]; [cell.starTextbookUse setBackgroundImage:[self getImageForStars:rateObject.totalTextbookUse] forState:UIControlStateNormal]; return cell; } } -(NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section { if (tableView.tag == 0) { if (isLoading == YES) { return 0; }else { return 7; } }else { if (isLoadingComments == NO && courseReviews) { return 1; }else { return 0; } } } -(NSInteger)numberOfSectionsInTableView:(UITableView *)tableView { if (isLoading == YES) return 0; if (tableView.tag != 0) return courseReviews.count; return 1; } -(UIView *)tableView:(UITableView *)tableView viewForFooterInSection:(NSInteger)section { if (section == 0 && tableView.tag == 0) { if (isLoading == YES) { return activityIndicator; }else if (isLoading == NO) { if (isLoadingComments == NO && courseReviews.count > 0) { UIView *view = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 320, tableViewTwo.frame.size.height)]; [view addSubview:tableViewTwo]; return view; }else if (isLoadingComments == YES){ UIView *subView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 320, 50)]; UIActivityIndicatorView *view = [[UIActivityIndicatorView alloc] initWithFrame:CGRectMake(145, 10, 36, 36)]; [view setActivityIndicatorViewStyle:UIActivityIndicatorViewStyleWhiteLarge]; [view setColor:[UIColor whiteColor]]; [view startAnimating]; [subView addSubview:view]; return subView; }else if (!courseReviews) { UIView *view = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 320, 40)]; UILabel *label = [[UILabel alloc] initWithFrame:CGRectMake(0, 10, 320, 30)]; [label setTextColor:[UIColor whiteColor]]; [label setTextAlignment:NSTextAlignmentCenter]; [label setFont:[PCFFontFactory droidSansFontWithSize:22]]; [label setText:@"No Reviews"]; [label setBackgroundColor:[UIColor clearColor]]; [view addSubview:label]; return view; } } } return nil; } -(CGFloat)tableView:(UITableView *)tableView heightForFooterInSection:(NSInteger)section { if (tableView.tag == 0) { if (isLoadingComments == NO && courseReviews.count > 0) return tableViewTwo.frame.size.height + 50; } return 5; } -(CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath { if (tableView.tag == 2) { PCFRateModel *model = [courseReviews objectAtIndex:indexPath.section]; CGSize size = [model.message sizeWithFont:[PCFFontFactory droidSansFontWithSize:11] constrainedToSize:CGSizeMake(290, 100000)]; return (93 + size.height + 10); }else { return tableView.rowHeight; } } -(UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section { if (section == 0 && tableView.tag == 0) { if ([PCFInAppPurchases boughtRemoveAds] == NO) { if (adView && adView.hidden == NO) { UIView *view = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 320, 80)]; CGRect frame = adView.frame; frame.origin.y = 0; adView.frame = frame; UILabel *label = [[UILabel alloc] initWithFrame:CGRectMake(10, 60, 320, 30)]; [label setNumberOfLines:0]; [label setText:classTitle]; [label setFont:[PCFFontFactory droidSansFontWithSize:14]]; [label setTextColor:[UIColor whiteColor]]; [label setBackgroundColor:[UIColor clearColor]]; [view addSubview:adView]; [view addSubview:label]; return view; } }else { UILabel *label = [[UILabel alloc] initWithFrame:CGRectMake(10, 0, 320, 30)]; [label setNumberOfLines:0]; [label setText:classTitle]; [label setFont:[PCFFontFactory droidSansFontWithSize:14]]; [label setTextColor:[UIColor whiteColor]]; [label setBackgroundColor:[UIColor clearColor]]; return label; } } return nil; } -(CGFloat)tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section { if (section == 0 & tableView.tag == 0) { if ([PCFInAppPurchases boughtRemoveAds] == NO) { if (adView && adView.hidden == NO) { return 90; }return 10; }else { return 30; } } return 5; } 

Ver Did Load (La información relevante):

  tableViewTwo = [[UITableView alloc] initWithFrame:CGRectMake(0, 50, 320, self.view.bounds.size.height) style:UITableViewStyleGrouped]; [tableViewTwo setSectionFooterHeight:0.0f]; [tableViewTwo setDataSource:self]; [tableViewTwo setDelegate:self]; [tableViewTwo setTag:2]; UILabel *label = [[UILabel alloc] initWithFrame:CGRectMake(0, 10, 320, 30)]; [label setTextColor:[UIColor whiteColor]]; [label setTextAlignment:NSTextAlignmentCenter]; [label setFont:[PCFFontFactory droidSansFontWithSize:22]]; [label setText:@"User Reviews"]; [label setBackgroundColor:[UIColor clearColor]]; [tableViewTwo setTableHeaderView:label]; [tableViewTwo setRowHeight:136]; [tableViewTwo setSectionFooterHeight:.01f]; [tableViewTwo setSectionHeaderHeight:.01f]; 

Adjunto algunas capturas de pantalla de la aplicación:

Cada vez que hago clic en o bash desplazarme por tableviewTwo tengo este locking.

Imagen de la aplicaciónTB2registro de bloqueos 1registro de falla 2propiedades

Actualizar:

punto de ruptura

Esto es lo que muestra cuando UITableView el segundo UITableView (con todas las excepciones habilitadas):

primera línea mostradadespués de hacer clic continuar

Tengo una compilation de esto funcionando perfectamente en mi teléfono (hace un mes) … No sé por qué recibo este error ahora. ¿Podría un cambio si Interface Builder lo ha causado? He verificado todos los puntos de venta y los he incluido. Gracias..

Actualizar:

Por extraño que parezca, cuando clono el repository en otra computadora portátil funciona sin problemas. Creo que de algún modo el proyecto que estaba usando estaba corrompido. Iré a casa e investigaré más.

Cualquier idea de por qué esto no se cuelga en mi portátil de trabajo (especificaciones similares) y se está estrellando en mi computadora portátil. He clonado el directory git en ambas computadoras portátiles y estoy chocando aquí, pero no estoy allí. Estoy ejecutando XCode versión 4.6.3 en mi computadora portátil.

Actualización 2:

Ya no funciona en mi computadora portátil de trabajo … ¿Está pasando WTF? ¿Hay un error en Xcode 4.6.3? ¿Hay algo que pueda hacer para solucionar este problema aún más? ¿Por qué se llama a numberOfSections? No puedo encontrar la documentation en ese en línea EN CUALQUIER LUGAR.

Actualización 3:

Bien, resulta que esta línea de código en el selector viewForFooterInSection es el culpable:

 UIView *view = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 320, tableViewTwo.frame.size.height)]; [view addSubview:tableViewTwo]; return view; 

Funciona bien en el dispositivo pero falla en el simulador. Cuando simplemente lo cambio a lo siguiente … funciona.

 return tableViewTwo; 

¿Alguien sabe por qué devolver la vista de tabla en una vista está dando un error?

numberOfSections es un método en UITableView : no es un método delegado. Parece que el sistema llama a este método internamente y, por alguna razón, su tabla se libera automáticamente (de ahí la falla).

Intentaría lo siguiente en su método viewForFooterInSection :

 static UIView *view = nil; if (!view) { view = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 320, tableViewTwo.frame.size.height)]; [view addSubview:tableViewTwo]; } return view; 

¿Acabas de mencionar que estás usando ARC, por lo que hiciste tu segunda propiedad TableView A fuerte? ¿Es un ivar?

El problema es que si no lo convertiste en una propiedad sólida, eventualmente se lanzará gracias a ARC y no podrás conocer el problema, ¿puedes publicar el código del file .h?