2012-08-03 12 views
25

Sto prendendo la classe iOS di iTunes U di Stanford e sto lavorando a uno degli incarichi per creare una piccola app Flickr. Sto ottenendo un errore che non riesco a essere in grado di eseguire il debug di cui si parla comeErrore di asserzione in UITableViewController

* errore di asserzione in - [UITableView _configureCellForDisplay: forIndexPath:], /SourceCache/UIKit_Sim/UIKit-2280.1/UITableView. m: 5336 2012-08-03 10: 59: 24,596 assegnazione 4 [4611: c07] (Null) libC++ abi.dylib: terminare chiamato un'eccezione

mio codice per la tableviewcontroller in questione :

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

Vedere anche registrare l'identificativo della cella. http://stackoverflow.com/questions/15813498/custom-table-cell-reuse-dequeue – Temporaneous

risposta

65

CellIdentifier Scommetto che il tuo cellForRowAtIndexPath restituisce 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; 
} 

Probabilmente è per questo [UITableView _configureCellForDisplay:forIndexPath:] sta fallendo ... perché cellForRowAtIndexPath restituisce un valore nullo e quindi configureCellForDisplay si aspetta un UITableViewCell.

+0

Ha funzionato! Per curiosità, perché una cella dovrebbe mai essere nullo? – gsapienza

+0

Un semplice esempio potrebbe essere quando tenta di eseguire il rendering della prima cella. Nessun UITableViewCells è stato creato in modo che non ci sia nessuno da riutilizzare. – jerrylroberts

+1

strano considerando che non ho dovuto farlo per l'altro tavolo ho – gsapienza

2

Questa linea qui

static NSString *CellIdentifier = @"Photos"; 

Fa questa partita l'identificatore di cellula del vostro storyboard? Ho trovato questi non corrispondenti era la causa del problema per me!

0

non si sta creando cellulare nel metodo

tableView:cellForRowAtIndexPath: 

Hai solo riutilizzando la cellula da questo metodo che restituisce nil inizialmente.

È necessario creare cella con questo codice indicato di seguito nel metodo.

if(cell==nil){ 

    cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault 
reuseIdentifier:CellIdentifier] autorelease]; 

} 
2

Ho affrontato lo stesso problema e risolverlo causa Ho dimenticato di aggiungere

return cell; 

ora il suo risolto.

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

} 
Problemi correlati