#ios #objective-c #iphone #delegates
#iOS #objective-c #iPhone #делегаты
Вопрос:
## Сетевой класс
-(void)getResponse:(NSString *)url{
NSMutableURLRequest *urlRequest = [NSMutableURLRequest requestWithURL:[NSURL URLWithString:url]];
[urlRequest setHTTPMethod:@"GET"];
NSURLSessionConfiguration *configuration = [NSURLSessionConfiguration defaultSessionConfiguration];
NSURLSession *session = [NSURLSession sessionWithConfiguration:configuration];
NSURLSessionDataTask *task = [session dataTaskWithRequest: urlRequest completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
//check if we encountered an error
if(error != nil){
NSLog(@"%@", [error localizedDescription]);
}else{
//get and check the HTTP status code
NSInteger HTTPStatusCode = [(NSHTTPURLResponse *)response statusCode];
if (HTTPStatusCode != 200) {
NSLog(@"HTTP status code = %ld", (long)HTTPStatusCode);
}
[[NSOperationQueue mainQueue] addOperationWithBlock:^{
if(data != nil){
NSError *parseError = nil;
NSDictionary *responseDictionary = [NSJSONSerialization JSONObjectWithData:data options:0 error:amp;parseError];
[[NSNotificationCenter defaultCenter] postNotificationName:@"ReloadNotification"
object:self
userInfo:responseDictionary];
NSLog(@"The response is - %@",responseDictionary);
}
}];
}
}];
[task resume];
}
ViewController
-(void)viewDidLoad
{
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(notifyReload:) name:@"ReloadNotification" object:nil];
}
Здесь я сообщил viewcontroller, что ответ пришел с сервера, и, пожалуйста, отразите ответ на контроллере представления с помощью NSNOTIFICATION .На самом деле я хочу реализовать то же самое с помощью делегатов.Я начинающий программист и пытаюсь изучить делегаты, но не в состоянии понять концепции, пожалуйста, объясните с помощью кода, как одна и та же задача может быть выполнена с помощью делегатов.Заранее спасибо!
Комментарии:
1. Обратитесь — dzone.com/articles/do-not-publishcreating-your
Ответ №1:
Вы можете сделать это с помощью обратного вызова через блоки:
Объявленный метод с использованием блока :
-(void)getResponse:(NSString *)url AndWithCallback:(void(^)(BOOL success, id responseObject))callback{
if(data != nil){
callback(YES,@"Your object");
}
else{
callback(NO,@"pass nil");
}
}
Вызвать метод :
[self getResponse:@"" AndWithCallback:^(BOOL success, id responseObject) {
NSLog(@"%@",responseObject);
}];
Комментарии:
1. Это то, что все используют и что должен использовать плакат. Используя блоки, вы можете вызвать GetResponse из любого места вашего кода, и между обратным вызовом и вашим кодом существует непосредственная связь.
2. да, вы можете объявить этот метод в классе или в модели, вы можете получить обратный вызов, используя block, как указано в моем ответе.
3. Я знаю, что это можно сделать с помощью блоков .. но я хочу изучить делегатов, поэтому я хочу реализовать через делегатов.