Я не могу перезагрузить данные в contactsTableView в iOS. Я понял, что функция cellForRowAtIndexPath не вызывается.

Я вызываю onGroupClick на screenController и reloadData получаю 4 объекта, но я не вижу их на своем contactsListView.

ScreenController:

-(void)onGroupClick:(NSString *)groupClickedId {
    NSLog(@"Group id: %@ was clicked on group tab", groupClickedId);
    contactsTableViewController* ctVC = (contactsTableViewController*)[childControllers objectAtIndex:1];
    ctVC.groupSelectedId = groupClickedId;
    [ctVC reloadData];
    [self switchTabs:1 ];
}

Контакты TableViewController:

contactsTableViewController:

#import "contactsTableViewController.h"
#import "contactsTableViewCell.h"
#import "ModelUser.h"
#import "ModelGroup.h"
#import "userDetailsProfile.h"

@interface contactsTableViewController (){
    NSArray* usersId;
    NSMutableArray* usersData;
}

@end

@implementation contactsTableViewController

- (void)viewDidLoad {
    [super viewDidLoad];
    self.groupSelectedId = @"";
    [self reloadData];
}

- (void)didReceiveMemoryWarning {
    [super didReceiveMemoryWarning];
    // Dispose of any resources that can be recreated.
}

- (void)reloadData {


    if([self.groupSelectedId isEqualToString:@""])
        NSLog(@"Contacts list is empty on first app run");

    else {

        NSLog(@"Contacts list for group id: %@ was loaded on contacts tab", self.groupSelectedId);

        //get id of my contacts in selected group
        usersId = [[ModelGroup instance] getGroup:self.groupSelectedId].contactsIdList;

        //get data of my contacts in selected group
        usersData = [[NSMutableArray alloc] init];
        for (int i=0; i< [usersId count] ; i++) {
            User* us = [[ModelUser instance] getUser:([usersId objectAtIndex:i])];
            [usersData addObject:us];
        }
    }
}

#pragma mark - Table view data source

- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView {
    // Return the number of sections.
    return 1;
}

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
    // Return the number of rows in the section.
    return usersData.count;
}

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
    contactsTableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"contactCell" forIndexPath:indexPath];

    User *us = [usersData objectAtIndex:indexPath.row];

    cell.contactsUserId = us.userId;
    cell.contactsName.text = [NSString stringWithFormat:@"%@ %@",us.fname,us.lname];
    [cell.contactsImage setFrame:CGRectMake(0, 0, 10, 10)];
    [cell.contactsImage setImage: [UIImage imageNamed:us.imageName]];
    [cell contactsSave:cell.contactsSave];
    [cell contactsAddToFav:cell.contactsAddToFav];
    return cell;
}

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
    User *us = [usersData objectAtIndex:indexPath.row];

    UIStoryboard* sb = [UIStoryboard storyboardWithName:@"Main" bundle:nil];
    userDetailsProfile*  udVC = [sb
                                 instantiateViewControllerWithIdentifier:@"userDetailsProfile"];
    udVC.modalTransitionStyle = UIModalTransitionStyleCrossDissolve;
    udVC.userDetailId = [NSString stringWithFormat:@"%@", us.userId];
    [self showViewController:udVC sender:self];

}

/*
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:<#@"reuseIdentifier"#> forIndexPath:indexPath];

    // Configure the cell...

    return cell;
}
*/

/*
// Override to support conditional editing of the table view.
- (BOOL)tableView:(UITableView *)tableView canEditRowAtIndexPath:(NSIndexPath *)indexPath {
    // Return NO if you do not want the specified item to be editable.
    return YES;
}
*/

/*
// Override to support editing the table view.
- (void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath {
    if (editingStyle == UITableViewCellEditingStyleDelete) {
        // Delete the row from the data source
        [tableView deleteRowsAtIndexPaths:@[indexPath] withRowAnimation:UITableViewRowAnimationFade];
    } else if (editingStyle == UITableViewCellEditingStyleInsert) {
        // Create a new instance of the appropriate class, insert it into the array, and add a new row to the table view
    }   
}
*/

/*
// Override to support rearranging the table view.
- (void)tableView:(UITableView *)tableView moveRowAtIndexPath:(NSIndexPath *)fromIndexPath toIndexPath:(NSIndexPath *)toIndexPath {
}
*/

/*
// Override to support conditional rearranging of the table view.
- (BOOL)tableView:(UITableView *)tableView canMoveRowAtIndexPath:(NSIndexPath *)indexPath {
    // Return NO if you do not want the item to be re-orderable.
    return YES;
}
*/

/*
#pragma mark - Navigation

// In a storyboard-based application, you will often want to do a little preparation before navigation
- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {
    // Get the new view controller using [segue destinationViewController].
    // Pass the selected object to the new view controller.
}
*/

- (IBAction)contactsAddToFav:(id)sender {
}

- (IBAction)contactsSave:(id)sender {
}
@end
0
j doe 31 Дек 2015 в 05:17

2 ответа

Лучший ответ

У вас есть UITableViewController. Вы добавили метод reloadData в контроллер табличного представления и вызываете его. Это не то же самое, что вызов метода reloadData tableView.

Если вы хотите, чтобы этот пользовательский метод вызывал перезагрузку табличного представления, ему необходимо вызвать метод reloadData табличного представления:

- (void)reloadData {
    if([self.groupSelectedId isEqualToString:@""])
        NSLog(@"Contacts list is empty on first app run");
    else {
        NSLog(@"Contacts list for group id: %@ was loaded on contacts tab", 
          self.groupSelectedId);
        //get id of my contacts in selected group
        usersId = 
          [[ModelGroup instance] 
          getGroup:self.groupSelectedId].contactsIdList;

        //get data of my contacts in selected group
        usersData = [[NSMutableArray alloc] init];
        for (int i=0; i< [usersId count] ; i++) {
            User* us = [[ModelUser instance] getUser:([usersId objectAtIndex:i])];
            [usersData addObject:us];
        }
    }
    [self.tableView reloadData]; //Add this line.
}

Когда вы это сделаете, представление таблицы вызовет метод numberOfSectionsInTableView, затем numberOfRowsInSection (один или несколько раз), а затем cellForRowAtIndexPath

1
Duncan C 31 Дек 2015 в 02:37

Проверьте свой источник данных tableview, и делегат может его решить

@interface contactsTableViewController ()<UITableViewDelegate,UITableViewDataSource>{
    NSArray* usersId;
    NSMutableArray* usersData;
}

- (void)viewDidLoad {
    [super viewDidLoad];
    self.tableView.delegate = self;
    self.tableView.dataSource = self;
    self.groupSelectedId = @"";
    [self reloadData];
}
0
Y.Guan 31 Дек 2015 в 03:22