2013-04-11 3 views
0

AFNetworking을 사용하여 데이터를 가져오고 있으며 UIController가 될 수있는 Service 클래스의 델리게이트가 있습니다. Service 클래스는 AFNetworking 클래스를 통해 데이터를 가져 오는 작업을 담당합니다. 대의원이 AFNetworking 응답 블록에서 nil이됩니까?

//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에서

: 나는 iOS 앱을 실행하면 나는

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]; 
    }]; 
관련 문제