2013-04-11 2 views
0

Я использую AFNetworking для получения данных, и у меня есть делегат в классе Service, который может быть UIController. Класс Service отвечает за выборку данных через классы AFNetworking.Делегат становится nil внутри блока ответа AFNetworking?

//Class Service. 


@interface Service : NSObject { 

    __weak id<ServiceDelegate>delegate; 

} 


- (void) doFetch:(APIInput*) input { 

    NSURL *url = [NSURL URLWithString:[self getLocation:input]]; 
    NSLog(@"url request is: %@", url); 
    NSURLRequest *request = [NSURLRequest requestWithURL:url]; 

    AFJSONRequestOperation *operation = [AFJSONRequestOperation JSONRequestOperationWithRequest:request success:^(NSURLRequest *request, NSHTTPURLResponse *response, id JSON) { 
     //NSLog(@"IP Address: %@", [JSON valueForKeyPath:@"origin"]); 

     [self.delegate serviceDidComplete:[self allocNewData:JSON]]; 
    } failure:^(NSURLRequest *request, NSHTTPURLResponse *response, 
       NSError *error, id JSON){ 

     [self.delegate serviceFailed: error]; 
    }]; 

    [operation start]; 
} 

И в UIController viewDidLoad: У меня есть следующие

self.networkService = [[Service alloc] init]; 
[self.networkService setDelegate:self]; 

После того, как я запустить приложение Иос, self.delegate равна нулю. Почему это происходит?

ответ

4

Это разрешило это. Я создал переменную __block перед установкой операции

__block id itsme = self.delegate; 

AFJSONRequestOperation *operation = [AFJSONRequestOperation JSONRequestOperationWithRequest:request success:^(NSURLRequest *request, NSHTTPURLResponse *response, id JSON) { 
     //NSLog(@"IP Address: %@", [JSON valueForKeyPath:@"origin"]); 

     [itsme serviceDidComplete:[self allocNewData:JSON]]; 
    } failure:^(NSURLRequest *request, NSHTTPURLResponse *response, 
       NSError *error, id JSON){ 

     [itsme serviceFailed: error]; 
    }]; 
Смежные вопросы