多次子类化 RKObjectManager

Subclassing RKObjectManager multiple times

我有一个名为 MyObjectManager 的子类,它继承自 RKObjectManagerMyObjectManager 我初始化 RestKit(设置基础 url 等等)

然后我将 MyObjectManager 子类化为两个不同的 类: UserManagerGameManager。各自实现不同的功能

起初我调用 UserManager sharedManager 并且它工作正常。后来我用相关函数调用了 GameManager sharedManager,但我得到了一个 "unrecognized selector sent to instance" 错误,因为它将后者称为 UserManager.

我在指南中读到多次接受 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 是一个 class 方法。它将在第一次调用时实例化共享管理器,然后 return 在以后的调用中实例化它。您对 sharedManager 的第一次调用确实实例化了一个 RKObjectManager,而您对 GameManager sharedManager 的调用确实 return 了相同的实例。这个实例是 class RKObjectManager ,它没有实现 GameManager 的功能 - 因此 无法识别的选择器发送到实例 错误。

这对于 subclass RKObjectManager 是完全可以接受的,但是您可能还应该将 class GameManager 中的 class 方法 +sharedManager subclass 到return 你自己的静态实例而不是依赖于 RKObjectManager 的实例。

编辑:根据您的编辑,您应该尝试在 GameManager 内子 class +managerWithBaseURL 这样 returns 就是 GameManager 的一个实例而不是 RKObjectManager.