2017-09-20 17 views
0

私はAPIと通信するクラスを作成しています。私はSessionManagerを作成することで開始しました:私はこのSessionManagerを拡張するいくつかのクラスを書いたシングルトンのサブクラス化が期待通りに機能しない

@interface SessionManager : AFHTTPSessionManager 

+ (id)sharedManager; 

@end 

static NSString *const kBaseURL = @"https://myapi.com"; 

@implementation SessionManager 

- (id)init { 
    self = [super initWithBaseURL:[NSURL URLWithString:kBaseURL]]; 
    if(!self) return nil; 

    self.responseSerializer = [AFJSONResponseSerializer serializer]; 
    self.requestSerializer = [AFJSONRequestSerializer serializer]; 

    return self; 
} 

+ (id)sharedManager { 
    static SessionManager *_sessionManager = nil; 

    static dispatch_once_t onceToken; 
    dispatch_once(&onceToken, ^{ 
     _sessionManager = [[self alloc] init]; 
    }); 

    return _sessionManager; 
} 

@end 

。 API内のすべてのエンティティに1つ:RestaurantManager,StreetManagerおよびAreaManagerしかし、私がそれらのうちの1つを使用し、次に使用すると、それは依然として最初のものを使用します。

NSArray *restaurants = [[RestaurantManager sharedManager] getRestaurants]; 

// restaurants contains all the restaurants 

NSArray *streets = [[StreetsManager sharedManager] getStreets]; 

// streets still contains all the restaurants 

これを修正する方法についてのご意見はありますか?

+0

クラスメソッドをオーバーライドしない限り、サブクラスは常に同じ共有インスタンスを使用します。 – vadian

答えて

1

サブクラスで+ (id)sharedManagerメソッドをオーバーライドする必要があります。そうでなければ、同じsharedManagerメソッドに行き、同じstatic SessionManager変数とやり取りします。

関連する問題