Ответ 1
Если вы хотите добавить пользовательский класс делегатов, вам нужно как минимум реализовать протоколы NSURLSessionDataDelegate
и NSURLSessionTaskDelegate
.
С помощью методов:
NSURLSessionDataDelegate - получить непрерывный статус вашего запроса
- (void)URLSession:(NSURLSession *)session dataTask:(NSURLSessionDataTask *)dataTask didReceiveResponse:(NSURLResponse *)response
completionHandler:(void (^)(NSURLSessionResponseDisposition disposition))completionHandler {
receivedData=nil; receivedData=[[NSMutableData alloc] init];
[receivedData setLength:0];
completionHandler(NSURLSessionResponseAllow);
}
NSURLSessionDataDelegate
-(void)URLSession:(NSURLSession *)session dataTask:(NSURLSessionDataTask *)dataTask
didReceiveData:(NSData *)data {
[receivedData appendData:data];
}
NSURLSessionTaskDelegate
- (void)URLSession:(NSURLSession *)session task:(NSURLSessionTask *)task
didCompleteWithError:(NSError *)error {
if (error) {
// Handle error
}
else {
NSDictionary* response=(NSDictionary*)[NSJSONSerialization JSONObjectWithData:receivedData options:kNilOptions error:&tempError];
// perform operations for the NSDictionary response
}
Если вы хотите отделить код делегата (средний уровень) от вашего вызывающего класса (как правило, его хорошая практика иметь отдельный класс/уровень для сетевых вызовов), делегат NSURLSession должен быть: -
NSURLSession *session=[NSURLSession sessionWithConfiguration:sessionConfig delegate:myCustomDelegateClass delegateQueue:nil];
Ссылки ссылки: