2015-02-03 2 views
1

나는 두 개의 다른 클래스로 MyObjectManager를 서브 클래스서브 클래스 RKObjectManager 여러 번

MyObjectManagerRKObjectManager 에서 상속 MyObjectManager라는 서브 클래스 I 초기화 RestKit (설정 기본 URL 등 등)를 가지고있다. 각기 다른 기능을 구현합니다

처음에는 UserManager sharedManager으로 전화를 걸었습니다. 나중에 GameManager sharedManager을 관련 함수와 함께 호출했지만 후자를 UserManager으로 언급하므로 "인식 할 수없는 선택기를 인스턴스로 보냄"오류가 발생합니다.

RKObjectManager를 여러 번 서브 클래 싱하는 것이 허용된다는 가이드 라인을 읽었습니다. 무엇이 없습니까?

MyObjectManager 구현 : RKObjectManager +sharedManager 클래스의 방법이기 때문이다

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; 
} 
+0

sharedManager 함수가 정의되어 있습니까? GameManager sharedManager를 사용하려면 해당 클래스 또는 수퍼 클래스 인 MyObjectManager 또는 RKObjectManager에 정의되어야합니다. – rishi

+0

@rishi 편집보기 – Shai

답변

3

. 첫 번째 호출에서 공유 관리자를 인스턴스화 한 다음 이후 호출에서 공유 관리자를 반환합니다. sharedManager에 대한 첫 번째 호출은 RKObjectManager를 인스턴스화했으며 GameManager sharedManager에 대한 호출은 동일한 인스턴스를 반환했습니다. 이 인스턴스는 RKObjectManager 클래스이므로 GameManager의 기능을 구현하지 않습니다. 따라서 인식 할 수없는 셀렉터가 인스턴스 오류로 전송되었습니다. RKObjectManager의 하위 클래스를 완벽하게 수용입니다하지만 당신은 아마도 RKObjectManager의 하나에 의존하는 대신 자신의 정적 인스턴스를 반환 GameManager 내부 클래스 메소드 +sharedManager를 서브 클래스해야

.

편집 : 편집에 따라 RKObjectManager 대신 GameManager의 인스턴스를 반환하도록 GameManager 안에 +managerWithBaseURL의 하위 클래스를 만들어야합니다.

관련 문제