0

我正在尝试学习 Core Data 的工作原理。所以我创建了一个具有属性的实体,为我的实体获取了 xcdatamodel 文件以及 .h 和 .m 文件。伟大的。

我还在我的应用程序委托中编写了以下代码,以向我的实体添加数据:

TestEntity *newEntity = [NSEntityDescription 
                         insertNewObjectForEntityForName:@"TestEntity" 
                         inManagedObjectContext:self.managedObjectContext];

newEntity.entityName = @"temp";

    NSError *savingError = nil;
    if([self.managedObjectContext save:&savingError]){
        NSLog(@"Success");

    }
    else{
        NSLog(@"Fail");
    }

到目前为止,一切都很好。但现在我想在我的主视图控制器中访问这些数据,即 entityName。这就是我迷路的地方。我阅读了源代码示例,其中大多数说执行以下操作

NSError *requestError = nil;
NSFetchRequest *fetchrequest = [[NSFetchRequest alloc] initWithEntityName: @"TestEntity"];
NSArray *entities = [self.managedObjectContext executeFetchRequest: fetchrequest error:&requestError]; 

这应该给我一个名为实体的数组,里面装满了 TestEntity 对象。所以我应该可以通过说entities.entityName.

但是我收到一条错误消息,说 managedobjectcontext 不是此视图控制器的属性。这对我来说很有意义,但我无法弄清楚解决方案是什么?我是否只需要在要使用核心数据的每个类中实现必要的 coredata 属性/方法?

4

2 回答 2

0

这不是一个真正的核心数据问题,而是一个基本的 Objective-C 问题。为了使用self.managedObjectContextself必须是一个类的实例,该类具有一个名为 的实例变量(即大多数现代 ObjC 中的属性)managedObjectContext如果您想使用它,您需要为该属性分配一个值。

添加属性很容易。只需在类上将其声明为适当类型的属性(此处为NSManagedObjectContext)。为其分配值取决于项目的整体结构。在 Xcode 的项目模板中,应用程序委托创建了一个托管对象上下文。应用程序委托通常还引用一个或多个视图控制器。如果您使用这种通用结构,一种从应用程序委托中的某处分配视图控制器的托管对象上下文属性的方法。类似的东西

self.mainViewController.managedObjectContext = self.managedObjectContext;

如果您的应用程序的架构不同,您将需要执行其他操作,但这将取决于应用程序的详细信息。

于 2013-11-11T17:06:16.723 回答
0

您必须参考您的 AppDelegate。像这样做:

AppDelegate *del = [[UIApplication sharedApplication] delegate];
self.managedObjectContext = del.managedObjectContext;
NSError *requestError = nil;
NSFetchRequest *fetchrequest = [[NSFetchRequest alloc] initWithEntityName: @"TestEntity"];
NSArray *entities = [self.managedObjectContext executeFetchRequest: fetchrequest error:&requestError];
于 2013-11-11T17:08:21.840 回答