viewDidLoad中的CoreData performFetch不起作用

加载我的主视图控制器并调用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:调用相同的方法viewDidAppear:它正常工作并返回我的CoreData对象的NSArray

是否有理由在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 

我的猜测是你的视图控制器是你的MainWindow.xib的一部分,所以它的viewDidLoad在你的app委托获得核心数据上下文之前被调用。

你可能想在viewWillAppear中运行它,这样你就可以在离开屏幕并返回时获得新数据。 另一个选项是确保应用程序委托通过获取核心数据堆栈(如果尚未准备好)来响应fetchedResultsController。