1
@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,这样我就可以继续添加实体*meetings 属性。谢谢。

4

3 回答 3

2

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

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

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

NSManagedObjectContext *context = [self managedObjectContext];

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

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

于 2013-02-13T19:02:02.150 回答
0

兄弟,正如它所说,您的“SecondScene”中没有“managedObjectContext”方法。是吗?

显然,您是核心数据的初学者,而且您刚刚涉足它。

但是,转到您项目的 AppDelegate,然后搜索“-(void)managedObjectContext”,您会看到那里有一个 manageobjectcontext 方法,将 [self manageobjectcontext] 替换为 AppDelegate 中的方法。

这将允许您访问 appdelegate

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

希望这可以帮助。

于 2013-02-13T18:27:26.737 回答
0

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

- 编辑 -

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

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

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

 NSManagedObjectContext *context = [appDelegate managedObjectContext];
于 2013-02-13T18:21:59.547 回答