reloadData不调用cellForRowAtIndexPath

use*_*870 7 objective-c uitableview ios

我的项目使用一个拆分视图控制器,其中包含一个包含类周期列表的表视图和一个详细说明类周期的主视图.当应用程序首次加载时,表视图中没有条目,主视图显示登录屏幕.当用户登录时,表视图应该使用包含每个类周期标题的文本重新加载.我无法正确重新加载数据.

按下登录按钮后,会向App代理发送一条消息...

- (IBAction)login:(id)sender
{
    if([self.appDelegate validateUsername:self.usernameField.text validatePassword:self.passwordField.text]) {
        NSLog(@"Login Successful!");
        [self performSegueWithIdentifier:@"loginSegue" sender:sender];
    }else {
        UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Login" message:@"Unsuccessful :(" delegate:nil cancelButtonTitle:@"OK" otherButtonTitles:nil, nil];
        [alert show];
    }
}
Run Code Online (Sandbox Code Playgroud)

...检查用户名信息是否有效.如果是,则执行主视图中的segue.验证用户名方法如下所示:

- (BOOL)validateUsername:(NSString *)username validatePassword:(NSString *)password
{
    // The "username isEqualToString" is placeholder.  This message will request a login and proceed if the login is successful
    if([username isEqualToString:@"username"] && [password isEqualToString:@"password"]) {
        self.student = [SCHStudent newStudentWithName:@"Random Student"];
        [self loadData];
        return YES;
    }else {
        return NO;
    }
}
Run Code Online (Sandbox Code Playgroud)

[self loadData]加载要在表视图中显示的类周期数组:

- (void)loadData
{
    [self.student.classPeriods addObject:[SCHClassPeriod newClassPeriodWithTeacher:@"Teacher1" periodNumber:1]];
    [self.student.classPeriods addObject:[SCHClassPeriod newClassPeriodWithTeacher:@"Teacher2" periodNumber:2]];
    [self.student.classPeriods addObject:[SCHClassPeriod newClassPeriodWithTeacher:@"Teacher3" periodNumber:3]];
    [self.student.classPeriods addObject:[SCHClassPeriod newClassPeriodWithTeacher:@"Teacher4" periodNumber:4]];
    [self.student.classPeriods addObject:[SCHClassPeriod newClassPeriodWithTeacher:@"Teacher5" periodNumber:5]];
    [self.student.classPeriods addObject:[SCHClassPeriod newClassPeriodWithTeacher:@"Teacher6" periodNumber:6]];
    [self.tableViewController loadLoginData];
}
Run Code Online (Sandbox Code Playgroud)

和[self.tableViewController loadLoginData]在我的表视图控制器中找到,看起来像这样. 这就是我在哪里.

- (void)loadLoginData
{
    [self.tableView reloadData];
    NSLog(@"loadLoginData");
}
Run Code Online (Sandbox Code Playgroud)

我知道正在调用此方法,因此重新调用numberOfRowsInSection.

numberOfRowsInSection:

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
    self.classPeriods = self.appDelegate.student.classPeriods;
    NSLog(@"numberOfRowsInSection returns %ld", (long)self.classPeriods.count);

    // Return the number of rows in the section.
    return self.classPeriods.count;
}
Run Code Online (Sandbox Code Playgroud)

的cellForRowAtIndexPath:

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"prototypeCell" forIndexPath:indexPath];
    SCHClassPeriod *tempPeriod = [self.classPeriods objectAtIndex:indexPath.row];
    NSLog(@"cellForRowAtIndexPath returns %@", tempPeriod.teacher);

    // Configure the cell...
    cell.textLabel.text = tempPeriod.teacher;

    return cell;
}
Run Code Online (Sandbox Code Playgroud)

唯一没有被调用的消息是cellForRowAtIndexPath.它最初没有被调用,因为classPeriods数组中没有对象.这是故意的.但是,我需要在调用reloadData时调用cellForRowAtIndexPath,它甚至不是numberOfRowsInSection.

对不起代码转储.我想确保回答这个问题所需的所有信息都存在.我已经在这个问题上工作了几天,所有类似的问题似乎都是针对每个项目的.

编辑: 控制台日志:

numberOfRowsInSection returns 0

numberOfRowsInSection returns 6

loadLoginData

Login Successful!
Run Code Online (Sandbox Code Playgroud)

Wil*_*con 6

如果reloadData没有调用cellForRowAtIndexPath,那么您还没有链接数据源或者没有与正确的表进行通信.