2015-08-07 1 views
1

Я создал категорию для NSURLSession, а затем столкнулся с проблемой. В iOS 7 [[NSURLSession sharedSession] isKindOfClass:[NSURLSession class]] возвращает NO.«NSURLSession sharedSession» не относится к NSURLSession

Я знаю, что [NSURLSession sharedSession] возвращает экземпляр __NSCFURLSession, но это не подкласс NSURLSession. Таким образом, это не имеет никакого смысла. Во время компиляции все работает нормально, но во время выполнения я получаю исключение исключаемого исключения.

Как я могу обойти это? Есть ли какая-либо функция времени выполнения, которую я могу использовать? Поскольку

[[NSURLSession sharedSession] respondsToSelector:@selector(dataTaskWithRequest:completionHandler:)] 

возвращается YES, и это единственный метод, который я использую в своей категории.

+0

dataTaskWithRequest: completionHandler: доступен в NSURLSession с прошивкой 7.0, поэтому в iOS 7 это вызовет любую проблему. – utogaria

ответ

1

В качестве альтернативы созданию метода экземпляра в вашей категории вы можете создать метод класса, который принимает экземпляр NSURLSession.

Предполагая, категория, как это:

@interface NSURLSession (MyCategory) 

- (void)doSomethingWithCompletion:(MyCompletionHandler)completionHandler; 

@end 

Замена может быть:

@interface NSURLSession (MyCategory) 

+ (void)doSomethingWithSession:(NSURLSession *)session completion:(MyCompletionHandler)completionHandler; 

@end 

С использованием следующим образом:

[NSURLSession doSomethingWithSession:[NSURLSession sharedSession] 
          completion:^{ ... }];