source how data collectionviewcell collection cellforitematindexpath ios uitableview flickr

ios - how - swift uicollectionview data source



Fallo de aserciĆ³n en UITableViewController (4)

Estoy tomando la clase de iOS iTunes U Stanford y estoy trabajando en una de las tareas para crear una pequeña aplicación de Flickr. Recibo un error que parece que no puedo depurar, lo que aparece como

* Fallo de aserción en - [UITableView _configureCellForDisplay: forIndexPath:], /SourceCache/UIKit_Sim/UIKit-2280.1/UITableView.m:5336 2012-08-03 10: 59: 24.596 Asignación 4 [4611: c07] c07] (null) libc ++ abi.dylib: termina llamado lanzando una excepción

Mi código para el tableviewcontroller en cuestión:

#import "PlacesPhotosTableViewController.h" @interface PlacesPhotosTableViewController () @property (nonatomic) NSDictionary *placeToDisplay; @property (nonatomic) NSArray *photosInPlace; @end @implementation PlacesPhotosTableViewController @synthesize placeToDisplay = _placeToDisplay; @synthesize photosInPlace = _photosInPlace; - (id)initWithStyle:(UITableViewStyle)style { self = [super initWithStyle:style]; if (self) { // Custom initialization } return self; } - (id)init { self = [super init]; return self; } - (id)initWithPlace:(NSDictionary *)place { self = [self init]; if (self) { self.placeToDisplay = place; } return self; } - (NSArray *)photosInPlace { if (_photosInPlace == nil) { _photosInPlace = [FlickrFetcher photosInPlace:self.placeToDisplay maxResults:50]; } return _photosInPlace; } - (void)viewDidLoad { [super viewDidLoad]; NSLog([self.placeToDisplay valueForKeyPath:@"description._content"]); // Uncomment the following line to preserve selection between presentations. // self.clearsSelectionOnViewWillAppear = NO; // Uncomment the following line to display an Edit button in the navigation bar for this view controller. // self.navigationItem.rightBarButtonItem = self.editButtonItem; } - (void)didReceiveMemoryWarning { [super didReceiveMemoryWarning]; // Dispose of any resources that can be recreated. } - (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation { return (interfaceOrientation == UIInterfaceOrientationPortrait); } #pragma mark - Table view data source - (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section { #warning Incomplete method implementation. // Return the number of rows in the section. return [self.photosInPlace count]; } - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { static NSString *CellIdentifier = @"Photos"; UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier]; NSString *string = [[self.photosInPlace objectAtIndex:indexPath.row] valueForKeyPath:@"description._content"]; cell.textLabel.text = string; return cell; }


Esta linea aqui

static NSString *CellIdentifier = @"Photos";

¿Coincide esto con el identificador de celda en tu guión gráfico? ¡Encontré que estos no coincidentes fueron la causa del problema para mí!


Me enfrenté al mismo problema y lo resolví porque olvidé agregar.

return cell;

ahora esta resuelto

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { if(tableView==notiTblView){ NSLog(@"TABLE NEW"); static NSString *cellIdentifier = @"MenuCell"; UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:cellIdentifier]; UIImageView *imageview; UILabel *label; UILabel *lblDetail; if(cell == nil) { cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:cellIdentifier]; imageview=[[UIImageView alloc]initWithFrame:CGRectMake(8, 3,30, 37)]; label=[[UILabel alloc]initWithFrame:CGRectMake(70, 10, 100, 20)]; lblDetail=[[UILabel alloc]initWithFrame:CGRectMake(70, 35, 100, 30)]; lblDetail.numberOfLines=3; imageview.tag=100; label.tag=101; lblDetail.tag=102; label.textColor=[UIColor blackColor]; label.font=[UIFont systemFontOfSize:15]; label.backgroundColor=[UIColor clearColor]; lblDetail.textColor=[UIColor grayColor]; lblDetail.font=[UIFont systemFontOfSize:13]; lblDetail.backgroundColor=[UIColor clearColor]; [cell.contentView addSubview:imageview]; [cell.contentView addSubview:label]; [cell.contentView addSubview:lblDetail]; } cell.selectionStyle=UITableViewCellSelectionStyleNone; UIImageView *img=(UIImageView *)[cell.contentView viewWithTag:100]; UILabel *lbl=(UILabel *)[cell.contentView viewWithTag:101]; NSString * stirngId = [NSString stringWithFormat:@"%@",[[notificationARRAY objectAtIndex:indexPath.row]objectForKey:@"photoID"]]; if ([dicImages_msg valueForKey:[[notificationARRAY objectAtIndex:indexPath.row] valueForKey:@"productName"]]) { img.image=[dicImages_msg valueForKey:[[notificationARRAY objectAtIndex:indexPath.row] valueForKey:@"productName"]]; } else { if (!isDragging_msg && !isDecliring_msg) { [dicImages_msg setObject:[UIImage imageNamed:@"timthumb.jpg"] forKey:[[notificationARRAY objectAtIndex:indexPath.row] valueForKey:@"productName"]]; [self performSelectorInBackground:@selector(download_Noti_image:) withObject:indexPath]; } else { img.image=[UIImage imageNamed:@"timthumb.jpg"]; } } lbl.text=[[notificationARRAY objectAtIndex:indexPath.row] objectForKey:@"memberName"]; lbl.text=[[notificationARRAY objectAtIndex:indexPath.row] objectForKey:@"memberName"]; return cell; /* static NSString *MyIdentifier = @"MyIdentifier"; UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:MyIdentifier]; if (cell == nil) { cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:MyIdentifier] ; cell.selectionStyle=UITableViewCellSelectionStyleNone; } cell.textLabel.text=[[notificationARRAY objectAtIndex:indexPath.row] objectForKey:@"memberName"]; return cell;*/ }else{ static NSString *cellIdentifier = @"MenuCell"; TblCell *cell = [tableView dequeueReusableCellWithIdentifier:cellIdentifier]; if (cell==nil) { cell = [[TblCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:cellIdentifier]; } NSLog(@"arr..in table..%@",PostedItem); cell.selectionStyle=UITableViewCellSelectionStyleNone; if([[[PostedItem objectAtIndex:indexPath.row] valueForKey:@"productType"] isEqualToString :@"Video"]){ cell.postedimage.image=[UIImage imageNamed:@"play_icon.png"]; }else{ if ([dicImages_msg valueForKey:[[PostedItem objectAtIndex:indexPath.row] valueForKey:@"productName"]]) { cell.postedimage.image=[dicImages_msg valueForKey:[[PostedItem objectAtIndex:indexPath.row] valueForKey:@"productName"]]; }else { if (!isDragging_msg && !isDecliring_msg) { [dicImages_msg setObject:[UIImage imageNamed:@"timthumb.jpg"] forKey:[[PostedItem objectAtIndex:indexPath.row] valueForKey:@"productName"]]; [self performSelectorInBackground:@selector(downloadImage_3:) withObject:indexPath]; } else { cell.postedimage.image=[UIImage imageNamed:@"timthumb.jpg"]; } } } //*******************User image if ([dic_usrImg valueForKey:[[PostedItem objectAtIndex:indexPath.row] valueForKey:@"thumbUrl"]]) { cell.profileImage.image=[dic_usrImg valueForKey:[[PostedItem objectAtIndex:indexPath.row] valueForKey:@"thumbUrl"]]; } else { if (!isDragging_msg && !isDecliring_msg) { [dic_usrImg setObject:[UIImage imageNamed:@"timthumb.jpg"] forKey:[[PostedItem objectAtIndex:indexPath.row] valueForKey:@"thumbUrl"]]; [self performSelectorInBackground:@selector(downloadImage_IMAGE4:) withObject:indexPath]; } else { cell.profileImage.image=[UIImage imageNamed:@"timthumb.jpg"]; } } //******************************** [cell.btnImage setTag:100000+indexPath.row]; [cell.btnImage addTarget:self action:@selector(Shopw_feedImg:) forControlEvents:UIControlEventTouchUpInside]; //*************** cell.postedimage.tag=indexPath.row; [cell.postedimage setUserInteractionEnabled:YES]; UITapGestureRecognizer *tap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(onImageClick:)]; [tap setNumberOfTouchesRequired:1]; [tap setNumberOfTapsRequired:1]; [tap setDelegate:self]; [cell.postedimage addGestureRecognizer:tap]; cell.membername.text=[[PostedItem objectAtIndex:indexPath.row] objectForKey:@"userName"]; [cell.membername sizeToFit]; //[[PostedItem objectAtIndex:indexPath.row] objectForKey:@"memberID"]; cell.productName.text= [[PostedItem objectAtIndex:indexPath.row]objectForKey:@"photoTitle"]; //@"hello this is a test doviumbmvbhdf asx"; // with new sffhy dgftn tun dgh "; // NSLog(@"Str Length...%d",[cell.productName.text length]); if ([cell.productName.text length]>38) { NSLog(@"greater then...%@",cell.productName.text); cell.productName.numberOfLines=2; CGRect frame=cell.postedimage.frame; frame.origin.y=130; cell.postedimage.frame=frame; CGRect Prdctframe=cell.productName.frame; frame.size.height=40.0f; cell.productName.frame=Prdctframe; //cell.postedimage.frame.origin.y=115.0f; }//[[PostedItem objectAtIndex:indexPath.row]objectForKey:@"photoTitle"]; //@"szfgfgbjmghufho stdogb ryt;o esftesi rdetg ry ry ry ";// else { cell.productName.numberOfLines=1; CGRect frame=cell.postedimage.frame; frame.origin.y=110; cell.postedimage.frame=frame; CGRect Prdctframe=cell.productName.frame; Prdctframe.size.height=20.0f; cell.productName.frame=Prdctframe; NSLog(@"less then..."); } //[cell.productName sizeToFit]; // cell.profileImage.image=[UIImage imageNamed:@"timthumb.jpg"]; return cell; } }


No estás creando celda en método

tableView:cellForRowAtIndexPath:

Solo reutilizando la celda de este método que devuelve nil inicialmente.

Tienes que crear la celda por este código dado a continuación en su método.

if(cell==nil){ cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier] autorelease]; }


CellIdentifier Apuesto a que su cellForRowAtIndexPath está devolviendo nil .

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { static NSString *CellIdentifier = @"Photos"; /** NOTE: This method can return nil so you need to account for that in code */ UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier]; // NOTE: Add some code like this to create a new cell if there are none to reuse if(cell == nil) { cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier] autorelease]; } NSString *string = [[self.photosInPlace objectAtIndex:indexPath.row] valueForKeyPath:@"description._content"]; cell.textLabel.text = string; return cell; }

Probablemente esa sea la razón por la que [UITableView _configureCellForDisplay:forIndexPath:] está fallando ... porque cellForRowAtIndexPath está devolviendo un valor nulo y luego configureCellForDisplay está esperando un UITableViewCell .