核心数据:对象 ID 错误:"选择器'managedObjectContext'没有已知的类方法


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

这不是核心数据错误,而是一个基本的Objective-C错误。您使用的方法是:

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

"+"表示这是一个类方法,而不是实例方法。因此,在这种情况下,selfSecondScene类,而不是该类的任何特定实例。当你尝试这样做时:

NSManagedObjectContext *context = [self managedObjectContext];

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

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

Brother,因为它说您的"SecondScene"中没有"managedObjectContext"方法。是吗?

显然,你是一个核心数据的初学者,而且你刚刚进入其中

但是,转到您项目的AppDelegate,搜索"-(void(managedObjectContext",您会发现那里有一个manageobjectcontext方法,请将[self-manageobjectcontext]替换为AppDelegate。

这将允许您访问appdelegate

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

希望这能有所帮助。

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

--编辑--

在任何需要访问ManagedObjectID的类中,您都要将委托声明为:

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

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

 NSManagedObjectContext *context = [appDelegate managedObjectContext];

相关内容

  • 没有找到相关文章

最新更新