核心数据 - NSManagedObjectContext 在 Master-Detail 应用程序中返回 nil

Posted

技术标签:

【中文标题】核心数据 - NSManagedObjectContext 在 Master-Detail 应用程序中返回 nil【英文标题】:Core Data - NSManagedObjectContext returns nil in Master-Detail Application 【发布时间】:2014-04-22 10:15:25 【问题描述】:

我正在开发一个闹钟应用程序,为此我使用 Apple 的 Master-Detail Application 模板中的 Core Data Stack,因此 Core Data 一切正常,直到我打电话 - (void)applicationDidEnterBackground:(UIApplication *)application MasterViewController 中的一个方法,它在应用程序在后台执行一些工作,最后应该是 tableView [self.tableView reloadData]

从这一点开始,我总是得到错误

+entityForName: nil 不是合法的 NSManagedObjectContext 参数搜索实体名称'myEntity'

应用程序运行时一切正常,但只有当应用程序处于后台时 tableView 应该重新加载时,我才会收到此错误。有谁知道我该如何解决这个问题?

在 AppDelegate.m 中

- (NSManagedObjectContext *)managedObjectContext 
if (_managedObjectContext != nil) return _managedObjectContext;

NSPersistentStoreCoordinator *coordinator = [self persistentStoreCoordinator];
if (coordinator != nil) 

    _managedObjectContext = [[NSManagedObjectContext alloc] init];
    [_managedObjectContext setPersistentStoreCoordinator:coordinator];

return _managedObjectContext; 

我在 applicationDidFinishLaunchingWithOptions 方法中有这段代码:

//some other stuff before...
WKMasterViewController *controller = (WKMasterViewController *)navigationController.topViewController;
controller.managedObjectContext = self.managedObjectContext;

在我的 MasterViewController.m 中,我有以下代码:

- (NSFetchedResultsController *)fetchedResultsController 
if (_fetchedResultsController != nil) 
    return _fetchedResultsController;


NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init];
NSEntityDescription *entity = [NSEntityDescription entityForName:@"myEntity" inManagedObjectContext:self.managedObjectContext];
[fetchRequest setEntity:entity];

[fetchRequest setFetchBatchSize:20];

NSSortDescriptor *sortDescriptor = [[NSSortDescriptor alloc] initWithKey:@"zeit" ascending:NO];
NSArray *sortDescriptors = @[sortDescriptor];

[fetchRequest setSortDescriptors:sortDescriptors];

NSFetchedResultsController *aFetchedResultsController = [[NSFetchedResultsController alloc] initWithFetchRequest:fetchRequest managedObjectContext:self.managedObjectContext sectionNameKeyPath:nil cacheName:@"Master"];
aFetchedResultsController.delegate = self;
self.fetchedResultsController = aFetchedResultsController;

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


return _fetchedResultsController;     

谢谢!!

【问题讨论】:

【参考方案1】:

检查->这个功能

- (NSManagedObjectContext *)managedObjectContext 

返回 NIL _managedObjectContext

如果变量上下文为零。这意味着您的 managedObjectContext 方法无法正常工作。

【讨论】:

以上是关于核心数据 - NSManagedObjectContext 在 Master-Detail 应用程序中返回 nil的主要内容,如果未能解决你的问题,请参考以下文章

过滤后的 SwiftUI CoreData 列表中的 Sum 属性

在 NSManagedObjectContextObjectsDidChangeNotification 中 NSUpdatedObjectsKey 和 NSRefreshedObjectsKey 有

大数据核心技术都有哪些

哪里不使用核心数据?是不是可以将核心数据用作 MySql 之类的数据库?

使用 MKMapView、核心位置和核心数据

大数据三大核心技术:拿数据、算数据、卖数据!