ios - 核心数据 : ObjectID Error: "No known class method for selector ' managedObjectContext'

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

最佳答案

那不是 Core Data 错误,而是基本的 Objective-C 错误。你在这个方法中:

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

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

NSManagedObjectContext *context = [self managedObjectContext];

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

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

关于ios - 核心数据 : ObjectID Error: "No known class method for selector ' managedObjectContext',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14860289/

相关文章:

ios - iCloud 中的 CoreData 和照片问题

ios - 使用线程和核心数据时出错(objective-c)

objective-c - 最佳实践 - iOS 中的 NSManagedObjectContextObjectsDidChangeNotification

c++ - 将函数的返回值分配给引用 c++?

c++ - SomeClass &a = *new SomeClass(...)

c++ - 使用引用时多态性并不总是有效

iOS - 允许用户添加日历事件并填写一些字段

iphone - 在 iphone 中单击按钮后如何获取触摸事件?

ios - 不支持 Xcode iOS 8 键盘类型

ios - 找不到虚拟设备 - Ionic Cordova Emulate iOS