iOS Core Data managedObjectContext:不知道选择器的类方法

Posted

技术标签:

【中文标题】iOS Core Data managedObjectContext:不知道选择器的类方法【英文标题】:iOS Core Data managedObjectContext: No know class method for selector 【发布时间】:2014-08-17 01:59:44 【问题描述】:

可能是一些简单的事情,但我的搜索都没有找到我需要的东西。

我在我的应用程序中使用 Core Data 来管理游戏的玩家和比赛。我的核心数据堆栈是完全通用的,并且在我的 AppDelegate 中。我正在尝试创建一个帮助类,它将基于搜索字符串返回一个实体(播放器)。当我尝试连接核心数据时,设置 fetchRequest 时出现此错误。

选择器“managedObjectContext”没有已知的类方法

这是代码... PlayerSearch.h

#import <Foundation/Foundation.h>
#import "Player.h"

@interface PlayerSearch : NSObject

+ (Player *)searchForPlayerWithID:(NSString*)playerID;

@end

PlayerSearch.m

导入“PlayerSearch.h”

#import "AppDelegate.h"

@interface PlayerSearch()
@property(nonatomic, strong) NSManagedObjectContext *managedObjectContext;

@end

@implementation PlayerSearch

-(NSManagedObjectContext*)managedObjectContext
return [(AppDelegate*)[[UIApplication sharedApplication]delegate]managedObjectContext];


+ (Player *)searchForPlayerWithID:(NSString*)playerID


NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init];
fetchRequest.entity = [NSEntityDescription entityForName:@"Player" inManagedObjectContext:[self managedObjectContext]];

...

return player;

@end

当我设置 fetchRequest.entity 的上下文时出现错误。这正是我在整个应用程序的视图控制器中设置上下文的方式,它在那里工作正常......

我错过了什么?

【问题讨论】:

【参考方案1】:

您的searchForPlayerWithID: 方法是一个类方法,您正试图从该类方法中调用self 上的实例方法(managedObjectContext)。

您可以通过将 managedObjectContext 方法更改为类方法来解决此问题:

+ (NSManagedObjectContext *)managedObjectContext

    return [(AppDelegate *)[[UIApplication sharedApplication] delegate] managedObjectContext];

【讨论】:

他还需要修改调用站点以不调用 self 而是调用类名(或者可能是 [self class])

以上是关于iOS Core Data managedObjectContext:不知道选择器的类方法的主要内容,如果未能解决你的问题,请参考以下文章

iOS 5 中 Core Data 的奇怪警告

iOS Core Data iCloud 同步 - 可选

Core Data

Core Data (iOS) 中的多列索引

iOS开发学习之Core Data

iOS Core Data 保存上下文错误