CoreData performFetch在viewDidLoad中不工作(CoreData per

2019-09-19 03:03发布

当我的主视图控制器被加载并且它调用viewDidLoad我执行取请求和退休阵列或我的核心数据对象:

+ (NSArray *)getData {

    // Fetch Data
    NSError *error = nil;
    if (![[[AppDelegate instance] fetchedResultsController] performFetch:&error]) {
        // Update to handle the error appropriately.
        NSLog(@"Unresolved error %@, %@", error, [error userInfo]);
        abort();
    }

    NSArray *items = [[AppDelegate instance].fetchedResultsController fetchedObjects];
    return items;

}//end

出于某种原因,这从返回时调用空数组viewDidLoad

如果我从调用相同的方法viewDidAppear:它工作正常,返回NSArray我的CoreData对象。

是否有一个原因,为什么这不会在工作viewDidLoad

编辑:

读取的结果控制器的方法:

/**
 * The controller the gets our results from core data
 *
 * @version $Revision: 0.1
 */
- (NSFetchedResultsController *)fetchedResultsController {

    if (fetchedResultsController != nil) {
        return fetchedResultsController;
    }

    // Create and configure a fetch request
    NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init];
    NSEntityDescription *entity = [NSEntityDescription entityForName:@"SiteConfig" inManagedObjectContext:self.managedObjectContext];
    [fetchRequest setEntity:entity];
    // Create the sort descriptors array
    NSSortDescriptor *sectionTitle = [[NSSortDescriptor alloc] initWithKey:@"createdDate" ascending:NO];
    NSArray *sortDescriptors = [[NSArray alloc] initWithObjects:sectionTitle, nil];
    [fetchRequest setSortDescriptors:sortDescriptors];

    // Create and initialize the fetch results controller
    NSFetchedResultsController *aFetchedResultsController = [[NSFetchedResultsController alloc] initWithFetchRequest:fetchRequest managedObjectContext:self.managedObjectContext sectionNameKeyPath:nil cacheName:@"Root"];
    self.fetchedResultsController = aFetchedResultsController;
    fetchedResultsController.delegate = self;

    // Memory management

    return fetchedResultsController;

}//end

Answer 1:

我的猜测是,您的视图控制器是您的MainWindow.xib的一部分,所以你的应用程序代理获得的核心数据上下文准备前的viewDidLoad中被调用。

你可能想在viewWillAppear中一定要运行这一点,所以,如果你离开屏幕和回报,你会得到新的数据。 另一种选择是,以确保应用程序的委托响应通过获取核心数据堆栈准备,如果它是不是已经到fetchedResultsController。



文章来源: CoreData performFetch in viewDidLoad not working