Ios 多次子类化RKObjectManager
我有一个名为Ios 多次子类化RKObjectManager,ios,objective-c,restkit,Ios,Objective C,Restkit,我有一个名为MyObjectManager的子类,它继承自RKObjectManager 在MyObjectManagerI中初始化RestKit(设置基本url等) 然后,我将MyObjectManager子类划分为两个不同的类: UserManager和GameManager。每个都实现不同的功能 首先,我调用UserManager-sharedManager,它工作正常。后来我用相关函数调用了GameManager sharedManager,但我得到了一个“无法识别的选择器发送到实例”错
MyObjectManager
的子类,它继承自RKObjectManager
在MyObjectManager
I中初始化RestKit(设置基本url等)
然后,我将MyObjectManager子类划分为两个不同的类:
UserManager
和GameManager
。每个都实现不同的功能
首先,我调用UserManager-sharedManager
,它工作正常。后来我用相关函数调用了GameManager sharedManager
,但我得到了一个“无法识别的选择器发送到实例”错误,因为它将后者称为用户管理器
我在指南中多次读到,它被接受为RKObjectManager的子类,我遗漏了什么
MyObjectManager实现:
static MyObjectManager *sharedManager = nil;
@implementation MyObjectManager
+ (instancetype)sharedManager {
static dispatch_once_t onceToken;
dispatch_once(&onceToken, ^{
NSString *baseUrl = [NSString stringWithFormat:@"http://ip/api"];
NSURL *url = [NSURL URLWithString:baseUrl];
sharedManager = [self managerWithBaseURL:url];
sharedManager.requestSerializationMIMEType = RKMIMETypeJSON;
[sharedManager setupRequestDescriptors];
[sharedManager setupResponseDescriptors];
});
return sharedManager;
}
这是因为
RKObjectManager+sharedManager
是一种类方法。它将在第一次调用时实例化共享管理器,然后在进一步调用时返回它。您对sharedManager
的第一次调用实例化了一个RKObjectManager,对GameManager sharedManager
的调用返回了相同的实例。此实例属于RKObjectManager类,它不实现GameManager的功能-因此无法识别的选择器发送到实例错误
这对于子类RKObjectManager
来说是完全可以接受的,但是您可能还应该在GameManager
中对类方法+sharedManager
进行子类化,以返回您自己的静态实例,而不是依赖RKObjectManager的静态实例
编辑:根据您的编辑,您应该尝试在
GameManager
中创建子类,以便返回GameManager
的实例,而不是RKObjectManager
其中定义了sharedManager函数?为了使用GameManager sharedManager,必须在其类或超类MyObjectManager或RKObjectManager中定义它。