J'écris une classe qui communique avec une API. J'ai commencé par la création d'un SessionManager
:Sous-classer un singleton ne fonctionne pas comme prévu
@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
j'ai écrit plusieurs classes qui étendent ce SessionManager
. Un pour chaque entité dans l'API: RestaurantManager
, StreetManager
et AreaManager
. Ce qui se passe, cependant, c'est que quand j'utilise l'un d'eux et puis un autre, il utilisera toujours le premier.
NSArray *restaurants = [[RestaurantManager sharedManager] getRestaurants];
// restaurants contains all the restaurants
NSArray *streets = [[StreetsManager sharedManager] getStreets];
// streets still contains all the restaurants
Des idées sur la façon de résoudre ce problème?
Tant que vous ne surchargez pas la méthode de classe, les sous-classes utilisent toujours la même instance partagée. – vadian