当我的主视图控制器被加载并调用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
答案 0 :(得分:1)
我的猜测是您的视图控制器是MainWindow.xib的一部分,因此在您的应用程序委托获得核心数据上下文之前,它的viewDidLoad正在被调用。
你可能想在viewWillAppear中运行它,这样你就可以在离开屏幕并返回时获得新数据。另一个选择是确保app delegate响应fetchedResultsController,方法是获取核心数据堆栈(如果尚未准备好)。