Я изучаю класс NSURLSession, и я хотел создать отдельный класс в своем проекте со всеми методами, которые я использую для извлечения данных из веб-службы.NSURLSession в отдельном классе не может передавать данные в ViewController
Это заголовочный файл, tclass.h
#import <Foundation/Foundation.h>
@interface tclass : NSObject
- (void)returnIP;
@property (nonatomic, strong) NSString *IP ;
@end
Это файл реализации, tclass.m
#import "tclass.h"
@implementation tclass
- (id)init {
self = [super init];
return self;
}
- (void)returnIP {
NSURLSession *session = [NSURLSession sharedSession];
[[session dataTaskWithURL:[NSURL URLWithString:@"http://icanhazip.com/"]
completionHandler:^(NSData *data,
NSURLResponse *response,
NSError *error) {
[self setIP:[NSString stringWithUTF8String:[data bytes]]];
}] resume];
}
@end
В моем классе ViewController, я в первую очередь использовать метод returnIP
для извлечения данных и хранения он в свойстве затем я обновляю пользовательский интерфейс, все это с помощью dispatch_async
.
- (IBAction)butact:(id)sender {
tclass *t = [[tclass alloc]init];
[_round setHidden:NO];
[_round startAnimating];
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_LOW, 0), ^{
[t returnIP];
dispatch_async(dispatch_get_main_queue(), ^{
[_round stopAnimating];
[_round setHidden:NO];
[_lab setText:[t IP]];
});
});
}
Моя проблема заключается в том, что свойство IP не заполняется, и обновление пользовательского интерфейса не представляется сделать, даже если я использую основной очереди, чтобы сделать это.
Как я могу выполнить этот процесс?
Является ли мой подход совершенно неправильным?
Благодарим за помощь.
Используйте шаблон завершения блока параметров: http://stackoverflow.com/a/26174930/1271826 – Rob