首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >CoreData: ObjectID错误:“选择器'managedObjectContext‘没有已知的类方法

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

Stack Overflow用户
提问于 2013-02-14 02:18:40
回答 3查看 1K关注 0票数 1
代码语言:javascript
复制
@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‘没有已知的类方法:

代码语言:javascript
复制
NSManagedObjectContext *context = [self managedObjectContext];

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

EN

回答 3

Stack Overflow用户

发布于 2013-02-14 03:02:02

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

代码语言:javascript
复制
+ (void)setObjectID:(NSManagedObjectID*)objectID;

"+“表示这是一个类方法,而不是实例方法。因此,本例中的selfSecondScene类,而不是该类的任何特定实例。当您尝试这样做时:

代码语言:javascript
复制
NSManagedObjectContext *context = [self managedObjectContext];

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

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

票数 2
EN

Stack Overflow用户

发布于 2013-02-14 02:22:00

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

-编辑--

无论你需要在哪个类中访问你的ManagedObjectID,你都需要这样声明你的委托:

代码语言:javascript
复制
AppDelegate *appDelegate = (AppDelegate *)[[UIApplication sharedApplication] delegate];

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

代码语言:javascript
复制
 NSManagedObjectContext *context = [appDelegate managedObjectContext];
票数 0
EN

Stack Overflow用户

发布于 2013-02-14 02:27:27

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

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

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

这将允许您访问appdelegate

代码语言:javascript
复制
YourAppDelegateClass   *appDelegate = (YourAppDelegate *)[[UIApplication sharedApplication] delegate]; and now call [appDelegate managedObjectContext];        

希望这能有所帮助。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14860289

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档