IOS - 3rd TableView in ViewController not loading nib

I am trying to fill 3 different ones TableViews

inside mine ViewController

(different tables are displayed based on the selected UISegmentControl

) - sidetableView

, neighboursView

and friendsView

. The first two fill up fine, however the third ( neighboursView

) doesn't seem to load the cell. See code below. Any idea why? I feel like I am defining the third thread in the viewdidLoad

wrong way?

ViewController.h

- (IBAction)segmentControl:(id)sender;
@property (weak, nonatomic) IBOutlet UISegmentedControl *segmentControl;
@property (weak, nonatomic) IBOutlet UITableView *sidetableView;
@property (strong, nonatomic) NSMutableArray *myFriendData;
@property (weak, nonatomic) IBOutlet UITableView *neighboursView;
@property (strong, nonatomic) NSMutableArray *friendData;
@property (strong, retain) NSMutableArray *neighbourData;

@property (strong, nonatomic) IBOutlet UITableView *friendsView;

      

ViewController.m

- (void)viewDidLoad {
        [super viewDidLoad];
         UINib *nib = [UINib nibWithNibName:@"sidebarCell" bundle:nil];
        [self.friendsView registerNib:nib forCellReuseIdentifier: @"sidebarCell"];
        nib = [UINib nibWithNibName:@"MyFriendTableViewCell" bundle:nil];
        [self.sidetableView registerNib:nib forCellReuseIdentifier: @"MyFriendTableViewCell"];
        nib = [UINib nibWithNibName:@"sidebarCell" bundle:nil];
        [self.neighboursView registerNib:nib forCellReuseIdentifier: @"sidebarCell"];
 }

- (NSInteger) tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
    if (tableView == self.sidetableView) {
        if ([self.myFriendData count] > 0) {
            return [self.myFriendData count];
        } else {
             return 0;
        }
    }
    if (tableView == self.friendsView) {
        if ([self.friendData count] > 0) {
            return [self.friendData count];

        } else {
            return 0;
          } 
    }
     else {

      //  return [self.neighbourData count];

    }
    return 0;

}

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{
       if (tableView == self.sidetableView) {
              self.sidetableView.separatorStyle = UITableViewCellSeparatorStyleNone;
             MyFriendTableViewCell *cell = (MyFriendTableViewCell *)[tableView dequeueReusableCellWithIdentifier:@"MyFriendTableViewCell"];
             NSDictionary *friendsName = [self.myFriendData objectAtIndex:indexPath.row];
            [[cell friendName] setText:[friendsName objectForKey:@"title"]];
            NSDictionary *friendsBio = [self.myFriendData objectAtIndex:indexPath.row];
            [[cell friendBio] setText:[friendsBio objectForKey:@"field_friendbio"][@"und"][0][@"safe_value"]];
            NSString *profilePath = [[self.myFriendData objectAtIndex:indexPath.row] objectForKey:@"field_picture"][@"und"][0][@"safe_value"];
           [cell.friendPic sd_setImageWithURL:[NSURL URLWithString:profilePath]];
           NSLog(@"This is profilePath %@",profilePath);
           return cell;
     }
     if (tableView == self.friendsView)
     {
            self.friendsView.separatorStyle = UITableViewCellSeparatorStyleNone;
            sidebarCell *cell = (sidebarCell *)[tableView dequeueReusableCellWithIdentifier:@"sidebarCell"];
            NSArray *nib = [[NSBundle mainBundle] loadNibNamed:@"sidebarCell" owner:self options:nil];
           cell = [nib objectAtIndex:0];
           NSDictionary *userName = [self.friendData objectAtIndex:indexPath.row];
           [[cell username] setText:[userName objectForKey:@"node_title"]];

           NSDictionary *userBio = [self.friendData objectAtIndex:indexPath.row];
           [[cell userDescription] setText:[userBio objectForKey:@"body"]];
           NSString *profilePath = [[self.friendData objectAtIndex:indexPath.row] objectForKey:@"friendphoto"];
           [cell.usermini sd_setImageWithURL:[NSURL URLWithString:profilePath]];
           return cell;

       } else {
             sidebarCell *cell = (sidebarCell *)[tableView dequeueReusableCellWithIdentifier:@"sidebarCell"];
             NSDictionary *userName = [self.neighbourData objectAtIndex:indexPath.row];
             [[cell username] setText:[userName objectForKey:@"first name"]];
              NSDictionary *userlast = [self.neighbourData objectAtIndex:indexPath.row];
              [[cell lastName] setText:[userlast objectForKey:@"last name"]];
              NSDictionary *userBio = [self.neighbourData objectAtIndex:indexPath.row];
              [[cell userDescription] setText:[userBio objectForKey:@"userbio"]];
              NSString *profilePath = [[self.neighbourData objectAtIndex:indexPath.row] objectForKey:@"photo_path"];
              [cell.usermini sd_setImageWithURL:[NSURL URLWithString:profilePath]];
              NSLog(@"This is profilePath %@",profilePath);
      }
       /*UITableViewCell *cell;
       return cell;*/ Never put this line in your code otherwise your tableview cell its nil
  }
   - (IBAction)segmentControl:(id)sender {

        UISegmentedControl *segmentedControl = (UISegmentedControl *) sender;
        NSInteger selectedSegment = segmentedControl.selectedSegmentIndex;

        switch (selectedSegment)
        {
             case 0:
                   [self.sidetableView setHidden:NO];
                   [self.neighboursView setHidden:YES];
                   [self.friendsView setHidden:YES];

                    NSLog(@"Requests!");
                    break;
             case 1: //FRIENDS MAP VIEW

                  [self.sidetableView setHidden:YES];
                  [self.friendsView setHidden:NO];
                  [self.neighboursView setHidden:YES];
                  break;
             case 2:

                  [self.sidetableView setHidden:YES];
                  [self.neighboursView setHidden:NO];
                  [self.friendsView setHidden:YES];
                  break;
          }
   }

      

+3


source to share


4 answers


Of course your third table view cannot load the cell ... you miss return cell;

in your third IF statement ...



+1


source


Try this way



- (NSInteger) tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{

    int numberOfRows; // this variable for return number of cell return 
    // here check your table 
    if (tableView == self.sidetableView) {

          numberOfRows  = [self.myFriendData count];
    }else if (tableView == self.friendsView) {

          numberOfRows =  [self.friendData count];
    }else if (tableView == self.neighboursView) {

          numberOfRows  =  [self.neighbourData count];
    }else {
          numberOfRows = 0;   
    }
    return numberOfRows;

}

      

0


source


Respond to code editing

ViewController.h

- (IBAction)segmentControl:(id)sender;
@property (weak, nonatomic) IBOutlet UISegmentedControl *segmentControl;
@property (weak, nonatomic) IBOutlet UITableView *sidetableView;
@property (strong, nonatomic) NSMutableArray *myFriendData;
@property (weak, nonatomic) IBOutlet UITableView *neighboursView;
@property (strong, nonatomic) NSMutableArray *friendData;
@property (strong, retain) NSMutableArray *neighbourData;

      

I would rather use a link weak

instead ofstrong

@property (weak, nonatomic) IBOutlet UITableView *friendsView;

      

ViewController.m

I think you may be missing the return for the array in numberOfRowsInSection

. I noticed another missing thing that you are not returning cell

in cellForRowAtIndexPath

for your neighboursView

tableView.

- (void)viewDidLoad {
        [super viewDidLoad];
        //remove un-necessary code
        UINib *nib = [UINib nibWithNibName:@"sidebarCell" bundle:nil];
        [self.friendsView registerNib:nib forCellReuseIdentifier: @"sidebarCell"];
        [self.neighboursView registerNib:nib forCellReuseIdentifier: @"sidebarCell"];
        nib = [UINib nibWithNibName:@"MyFriendTableViewCell" bundle:nil];
        [self.sidetableView registerNib:nib forCellReuseIdentifier: @"MyFriendTableViewCell"];
 }

- (NSInteger) tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
    if (tableView == self.sidetableView) {
        if ([self.myFriendData count] > 0) {
            return [self.myFriendData count];
        } else {
             return 0;
        }
    }
    if (tableView == self.friendsView) {
        if ([self.friendData count] > 0) {
             return [self.friendData count];

        } else {
            return 0;
        } 
    }
     else {
      //Are you forgetting un-commenting this??
      //  return [self.neighbourData count];
      return [self.neighbourData count];

    }
    return 0;

}

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{
       if (tableView == self.sidetableView) {
             self.sidetableView.separatorStyle = UITableViewCellSeparatorStyleNone;
             MyFriendTableViewCell *cell = (MyFriendTableViewCell *)[tableView dequeueReusableCellWithIdentifier:@"MyFriendTableViewCell"];
             NSDictionary *friendsName = [self.myFriendData objectAtIndex:indexPath.row];
             [[cell friendName] setText:[friendsName objectForKey:@"title"]];
             NSDictionary *friendsBio = [self.myFriendData objectAtIndex:indexPath.row];
             [[cell friendBio] setText:[friendsBio objectForKey:@"field_friendbio"][@"und"][0][@"safe_value"]];
             NSString *profilePath = [[self.myFriendData objectAtIndex:indexPath.row] objectForKey:@"field_picture"][@"und"][0][@"safe_value"];
             [cell.friendPic sd_setImageWithURL:[NSURL URLWithString:profilePath]];
             NSLog(@"This is profilePath %@",profilePath);
             return cell;
     }
     if (tableView == self.friendsView)
     {
            self.friendsView.separatorStyle = UITableViewCellSeparatorStyleNone;
            sidebarCell *cell = (sidebarCell *)[tableView dequeueReusableCellWithIdentifier:@"sidebarCell"];
            NSArray *nib = [[NSBundle mainBundle] loadNibNamed:@"sidebarCell" owner:self options:nil];
            cell = [nib objectAtIndex:0];
            NSDictionary *userName = [self.friendData objectAtIndex:indexPath.row];
            [[cell username] setText:[userName objectForKey:@"node_title"]];

            NSDictionary *userBio = [self.friendData objectAtIndex:indexPath.row];
            [[cell userDescription] setText:[userBio objectForKey:@"body"]];
            NSString *profilePath = [[self.friendData objectAtIndex:indexPath.row] objectForKey:@"friendphoto"];
            [cell.usermini sd_setImageWithURL:[NSURL URLWithString:profilePath]];
            return cell;

       } else {
            sidebarCell *cell = (sidebarCell *)[tableView dequeueReusableCellWithIdentifier:@"sidebarCell"];
            NSDictionary *userName = [self.neighbourData objectAtIndex:indexPath.row];
            [[cell username] setText:[userName objectForKey:@"first name"]];
            NSDictionary *userlast = [self.neighbourData objectAtIndex:indexPath.row];
            [[cell lastName] setText:[userlast objectForKey:@"last name"]];
            NSDictionary *userBio = [self.neighbourData objectAtIndex:indexPath.row];
            [[cell userDescription] setText:[userBio objectForKey:@"userbio"]];
            NSString *profilePath = [[self.neighbourData objectAtIndex:indexPath.row] objectForKey:@"photo_path"];
            [cell.usermini sd_setImageWithURL:[NSURL URLWithString:profilePath]];
            NSLog(@"This is profilePath %@",profilePath);

            // are you forgetting to return cell?
            return cell;
      }
  }
   - (IBAction)segmentControl:(id)sender {

        UISegmentedControl *segmentedControl = (UISegmentedControl *) sender;
        NSInteger selectedSegment = segmentedControl.selectedSegmentIndex;

        switch (selectedSegment)
        {
             case 0:
                   [self.sidetableView setHidden:NO];
                   [self.neighboursView setHidden:YES];
                   [self.friendsView setHidden:YES];

                    NSLog(@"Requests!");
                    break;
             case 1: //FRIENDS MAP VIEW

                  [self.sidetableView setHidden:YES];
                  [self.friendsView setHidden:NO];
                  [self.neighboursView setHidden:YES];
                  break;
             case 2:

                  [self.sidetableView setHidden:YES];
                  [self.neighboursView setHidden:NO];
                  [self.friendsView setHidden:YES];
                  break;
      }
}

      

0


source


Your code fails, you should

return cell;

      

to show it

0


source







All Articles