ios UITableViewController 中的断言失败
声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow
原文地址: http://stackoverflow.com/questions/11798444/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me):
StackOverFlow
Assertion Failure in UITableViewController
提问by gsapienza
I am taking the iTunes U Stanford iOS Class and am working on one of the assignments to build a little Flickr app. I am getting an error that I cannot seem to be able to debug which comes up as
我正在参加 iTunes U 斯坦福大学 iOS 课程,并且正在完成一项作业以构建一个小 Flickr 应用程序。我收到一个错误,我似乎无法调试它出现
*Assertion failure in -[UITableView _configureCellForDisplay:forIndexPath:], /SourceCache/UIKit_Sim/UIKit-2280.1/UITableView.m:5336 2012-08-03 10:59:24.596 Assignment 4[4611:c07] (null) libc++abi.dylib: terminate called throwing an exception
*断言失败 -[UITableView _configureCellForDisplay:forIndexPath:], /SourceCache/UIKit_Sim/UIKit-2280.1/UITableView.m:5336 2012-08-03 10:59:24.596 Assignment 4[4611:c07] (null) libc++ abi.dylib:终止调用抛出异常
My code for the tableviewcontroller in question:
我有问题的 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;
}
回答by jerrylroberts
CellIdentifier
I bet your cellForRowAtIndexPath
is returning nil
.
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;
}
That's probably why [UITableView _configureCellForDisplay:forIndexPath:]
is failing... because cellForRowAtIndexPath
is returning a null value and then configureCellForDisplay
is expecting a UITableViewCell
.
这可能就是[UITableView _configureCellForDisplay:forIndexPath:]
失败的原因......因为cellForRowAtIndexPath
返回一个空值然后configureCellForDisplay
期待一个UITableViewCell
.
回答by mahendra
I faced the same problem and solve it cause i forgot to add
我遇到了同样的问题并解决了它,因为我忘了添加
return cell;
now its resolved.
现在它解决了。
- (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;
}
}
回答by Matt Rees
This line here
这条线在这里
static NSString *CellIdentifier = @"Photos";
Does this match the cell identifier in your storyboard? I found these not matching was the cause of the problem for me!
这是否与故事板中的单元格标识符匹配?我发现这些不匹配是我出现问题的原因!
回答by Baalu
You are not Creating Cell in method
您不是在方法中创建单元格
tableView:cellForRowAtIndexPath:
You only reusing the cell from this method which returns nil
initially.
您只能重用此方法中nil
最初返回的单元格。
You have to create cell by this below given code in your method.
您必须在您的方法中通过下面给出的代码创建单元格。
if(cell==nil){
cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault
reuseIdentifier:CellIdentifier] autorelease];
}