无法获取 managedObjectContext 对象

Posted

技术标签:

【中文标题】无法获取 managedObjectContext 对象【英文标题】:not able to get managedObjectContext object 【发布时间】:2015-02-09 09:09:12 【问题描述】:

我是 CoreData 的新手。我正在使用精灵套件来创建游戏。我在 appdelegate.h 和 appdelegate.m 中将核心数据设置到我的项目中。我可以使用以下代码在 appdelegate 中获取数据

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

 [fetchRequest setEntity:entity];
 NSError *error;
 NSLog(@"%@",[self.managedObjectContext executeFetchRequest:fetchRequest error:&error]);

我想在另一个类(视图)中获取数据。我,因为我无法调用 self.managedObjectContext。 为了从另一个类中获取核心数据,我应该怎么做?

【问题讨论】:

【参考方案1】:

你必须有一些带有 NSManagedObjectContext 的类,例如'DBManger'

@interface DBManager : NSObject

@property (readonly, strong, nonatomic) NSManagedObjectContext *managedObjectContext;
@property (readonly, strong, nonatomic) NSManagedObjectModel *managedObjectModel;
@property (readonly, strong, nonatomic) NSPersistentStoreCoordinator *persistentStoreCoordinator;

@end

在您的 ViewController 中使用:

DBManager *dbManager = [[DBManager alloc] init];
NSManagedObjectContext *context = dbManager.managedObjectContext;

NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init];
NSEntityDescription *entity = [NSEntityDescription
                               entityForName:@"Current" inManagedObjectContext:context];

[fetchRequest setEntity:entity];
NSError *error;
NSLog(@"%@",[self.managedObjectContext executeFetchRequest:fetchRequest error:&error]);

如果你的 ManagedContext 在 AppDelegate 中,获取它:

NSManagedObjectContext *context = ((AppDelegate*)[UIApplication sharedApplication].delegate).managedObjectContext;

【讨论】:

以上是关于无法获取 managedObjectContext 对象的主要内容,如果未能解决你的问题,请参考以下文章

使用 FetchResultController 和 ManagedObjectContext 获取对象的区别

获取的属性和多个 ManagedObjectContext

RestKit:'NSInternalInconsistencyException',原因:'无法执行映射:没有分配`managedObjectContext`

为啥从 UIApplicationDelegate 获取 ManagedObjectContext 的 Apple 文档不好?

核心数据:从多个 ManagedObjectContexts 中获取对象

[AppDelegate managedObjectContext]:发送到实例的无法识别的选择器