UITableViewController中的声明失败

我正在学习iTunes U斯坦福大学的iOS课程,并正在开展一项任务,以构build一个Flickr应用程序。 我得到一个错误,我似乎无法debugging出现

*断言失败 – [UITableView _configureCellForDisplay:forIndexPath:],/SourceCache/UIKit_Sim/UIKit-2280.1/UITableView.m:5336 2012-08-03 10:59:24.596作业4 [4611:c07](null)libc ++ abi.dylib:终止调用抛出exception

我的问题tableviewcontroller的代码:

#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; } 

CellIdentifier我打赌你的cellForRowAtIndexPath返回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; } 

这可能是为什么[UITableView _configureCellForDisplay:forIndexPath:]失败…因为cellForRowAtIndexPath返回一个空值,然后configureCellForDisplay期待一个UITableViewCell

这行这里

 static NSString *CellIdentifier = @"Photos"; 

这是否匹配故事板中的单元格标识符? 我发现这些不匹配是我的问题的原因!

我面临同样的问题,并解决它,因为我忘了添加

 return cell; 

现在解决了。

 - (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; } } 

您不是在方法中创build单元格

 tableView:cellForRowAtIndexPath: 

你只能从这个返回nil方法中重用单元格。

你必须在你的方法中用下面给出的代码创build单元格。

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