iphone - 核心数据 - 在 vi​​ewDidLoad 之前调用数据源方法

标签 iphone objective-c cocoa-touch core-data

我注意到我的应用程序出现问题是因为在 viewDidLoad 之前调用了 UITableView 的 Datasource 方法。

问题是 UITableView 没有正确的行数,它从 NSFetchedResultsController 而不是 performFetch 的“函数”在 viewDidLoad 方法中调用,由于某种原因,该方法在数据源方法之后调用。

下面是两个重要方法的来源:

- (void)viewDidLoad {
    [super viewDidLoad];

 self.tableView.allowsSelectionDuringEditing = NO;
 self.tableView.editing = YES;
 self.title = [NSString stringWithFormat:@"%@", [[game valueForKey:@"title"] description]];

    NSError *error = nil;
    if (![[self fetchedResultsController] performFetch:&error]) {
        NSLog(@"Unresolved error %@, %@", error, [error userInfo]);
        abort();
    }

}

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
    id <NSFetchedResultsSectionInfo> sectionInfo = [[fetchedResultsController sections] objectAtIndex:section];
    return [sectionInfo numberOfObjects];
}

如何解决这个问题?

最佳答案

正常的程序流程要求在任何 UITableView 数据源方法之前调用 -viewDidLoad。如果您以相反的顺序获取它们,那么您的代码库中有某些东西导致它们被乱序调用。

首先,在您在此问题中显示的两个方法中放置一个断点,并确认它们被乱序调用。

然后,当您处于 -tableView:numberOfRowsInSection: 断点时,查看堆栈跟踪并查看为什么它在 -viewDidLoad< 之前被调用.

更新

如链接中所示,-viewDidLoad 最先被调用。当您在该堆栈跟踪中选择 [PlayerViewController -viewDidLoad] 行时,它位于哪一行代码?如果它位于 [super viewDidLoad] 上,那么您的父类(super class)是什么?在做什么 -viewDidLoad

关于iphone - 核心数据 - 在 vi​​ewDidLoad 之前调用数据源方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3484024/

相关文章:

iphone - 游戏场景在几次重播后开始闪烁

iPhone:在弹出的 DatePicker 框架中添加“完成”按钮

iphone - 第一个和最后一个 UITableViewCell 在滚动时不断变化

iphone - 从 iPhone 获取日志文件的最简单方法是什么?

iphone - 禁用导航项后退栏按钮

objective-c - UILabel字体大小?

objective-c - UIPickerView 自定义 View 不可视化

ios - Presented View Controller 状态栏颜色不一样,如何修改为默认值?

ios - 如何从我自己的应用程序打开任何iOS应用程序

objective-c - 在 iOS 上播放 youtube/vevo 视频