代码之家  ›  专栏  ›  技术社区  ›  Joshua

核心数据-在viewDidLoad之前调用Datasource方法

  •  4
  • Joshua  · 技术社区  · 15 年前

    我注意到我的应用程序中出现了一个问题,因为 UITableView 在之前调用 viewDidLoad .

    问题是 UITableView 没有正确的行数,它从 NSFetchedResultsController 但是 performFetch

    以下是两种重要方法的来源:

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

    我该如何克服这个问题?

    2 回复  |  直到 15 年前
        1
  •  4
  •   Marcus S. Zarra    15 年前

    正常的程序流调用 -viewDidLoad 在任何一个 UITableView 数据源方法。如果您以相反的顺序得到它们,那么在您的代码库中有一些东西导致它们被无序调用。

    首先,在本问题中显示的两个方法和 他们被叫来扰乱秩序。

    然后,在 -tableView:numberOfRowsInSection: 断点并查看 为什么? 它是在 -视图加载

    更新

    [PlayerViewController -viewDidLoad] 在堆栈跟踪中,它位于哪一行代码上?如果它坐在 [super viewDidLoad] -视图加载

        2
  •  -1
  •   Seamus Campbell    15 年前

    在我当前的应用程序中,一般的代码流是:

    (在父控制器中:)

    • 基于父控制器的相关参数构建NSFetchRequest。

    这种方法可以避免您遇到的问题。这也意味着显示结果的视图不需要有搜索逻辑,并且可以重用以显示不同的结果集(尽管通过传入NSFetchRequest可以获得相同的结果)。