CoreData:ObjectID错误:“没有选择器'managedObjectContext'的已知类方法

时间:2013-02-13 18:18:40

标签: ios core-data reference objectid

@implementation FirstScene
...
- (void)nextScene {
    Meetings *meetings = (Meetings *) [NSEntityDescription insertNewObjectForEntityForName:@"Meetings" inManagedObjectContext:self.managedObjectContext];
    NSManagedObjectID* objectID = [meetings objectID];
    [secondScene setObjectID:objectID];
}
...
@end

@implementation SecondScene
....
- (void)viewDidLoad
{
    [super viewDidLoad];
    self.managedObjectContext = [(STAppDelegate *)[[UIApplication sharedApplication]  delegate] managedObjectContext];
}

+ (void)setObjectID:(NSManagedObjectID*)objectID {
    NSManagedObjectContext *context = [self managedObjectContext]; // ERROR
    Meetings *theSameMeetings = (Meetings *)[context objectWithID:objectID];
}
...
@end

我收到错误“以下代码中没有选择器'managedObjectContext'的已知类方法:

NSManagedObjectContext *context = [self managedObjectContext];

我的目标是将FirstScene中* meetings(managedObjectContext)的objectID传递给SecondScene,以便我可以继续添加到entity * meetings属性。谢谢。

3 个答案:

答案 0 :(得分:2)

这不是核心数据错误,它是一个基本的Objective-C错误。你在这个方法中:

+ (void)setObjectID:(NSManagedObjectID*)objectID;

“+”表示这是一个类方法,而不是实例方法。所以self在这种情况下是SecondScene类,而不是该类的任何特定实例。当你尝试这样做时:

NSManagedObjectContext *context = [self managedObjectContext];

...您正在尝试调用名为+managedObjectContext的方法,即具有该名称的类方法。这显然不存在,这并不太令人惊讶。

我怀疑你打算让setObjectID:成为一个实例方法,这意味着它应该在行的开头有-而不是+

答案 1 :(得分:0)

通过调用[self managedObjectContext],编译器正在当前目标中查找明确不存在的-(void)managedObjectContext的方法名称。传递对象ID的最佳方法是设置属性并合成该属性,这将允许您将objectID分配给会议实例,然后从所述实例中检索它。

- 编辑 -

在您需要访问ManagedObjectID的任何类中,您希望声明您的委托:

AppDelegate *appDelegate = (AppDelegate *)[[UIApplication sharedApplication] delegate];

然后在你的setObjectID方法中你可以调用:

 NSManagedObjectContext *context = [appDelegate managedObjectContext];

答案 2 :(得分:0)

兄弟,因为它说你的'SecondScene'中没有'managedObjectContext'方法。是吗?

显然你是核心数据的初学者,你刚刚进入它。

然而,转到你项目的AppDelegate,并搜索' - (void)managedObjectContext',你会看到有一个manageobjectcontext方法,用AppDelegate中的方法替换[self manageobjectcontext]。

这将允许您访问appdelegate

YourAppDelegateClass   *appDelegate = (YourAppDelegate *)[[UIApplication sharedApplication] delegate]; and now call [appDelegate managedObjectContext];        

希望这有帮助。