2013-02-20 2 views
1

에 나는설정 JSONReadingOptions는 AFJSONRequestOperation

- (id)initWithBaseURL:(NSURL *)url { 
    self = [super initWithBaseURL:url]; 
    if (!self) { 
     return nil; 
    } 

    [self registerHTTPOperationClass:[AFJSONRequestOperation class]]; 
    [self setDefaultHeader:@"Accept" value:@"application/json"]; 
    self.parameterEncoding = AFJSONParameterEncoding; 

    return self; 
} 

는 그러나, 나는 변경 가능한 객체로 파싱 된 JSON 필요에 따라 같은 AFHTTPClient & 내가 요청 처리기로 AFJSONRequestOperation 클래스를 등록 상속. AFJSONRequestOperation에 JSONReadingOptions 속성이 있다는 것을 알았지 만, 내가 직접 AFHTTPClient과 작업 중이므로 설정하는 방법을 알지 못했습니다. 내 요청

답변

2

간단합니다.

  1. AFJSONRequestOperation의 하위 클래스를 만듭니다. AFHTTPClient의 서브 클래스에서
  2. 변경이이에
[__instance registerHTTPOperationClass:[AFJSONRequestOperation class]]; 

:

CustomClassJSONRequestOperation.m에서
[__instance registerHTTPOperationClass:[CustomClassJSONRequestOperation class]]; 

그냥이 쓰기 :

- (id)responseJSON { 
    [self setJSONReadingOptions: NSJSONReadingMutableContainers | NSJSONReadingAllowFragments];  
    return [super responseJSON]; 
} 
1

하나는 실패했고 오류 반환 :

JSON text did not start with array or object and option to allow fragments not set.

내가 AFJSONRequestOperation 서브 클래스했다 JSONReadingOptions을 설정 한 후 정적 팩토리 메소드에서 반환 된 인스턴스의 속성을 설정합니다.

+ (instancetype)JSONRequestOperationWithRequest:(NSURLRequest *)urlRequest 
             success:(void (^)(NSURLRequest *request, NSHTTPURLResponse *response, id JSON))success 
             failure:(void (^)(NSURLRequest *request, NSHTTPURLResponse *response, NSError *error, id JSON))failure 
{ 
    AFJSONRequestOperation *requestOperation = [super JSONRequestOperationWithRequest:urlRequest success:success failure:failure]; 
    requestOperation.JSONReadingOptions = NSJSONReadingAllowFragments; 
    return (MyRequestSubclass *)requestOperation; 
} 

그리고, 클라이언트에서 당신이 sharedClient이

[__instance registerHTTPOperationClass:[AFJSONRequestOperation class]]; 

... 그럼 다시, 그것은 무슨 일이 있었 타격 된 API는 아래로 밝혀졌다 초기화 할 때 HTTPOperationClass로 서브 클래스를 설정 , 그래서 그것은 html 오류 페이지를 반환하고 있습니다 ...

간단히 말하자면, 귀찮아지기 전에, 응답이 저조한 형태로 만들어 졌는지, 그리고 처음부터 존재하는지 확인하십시오.

+0

응답이 잘 형성되어 작동합니다 벌금. 필자는 변경 불가능한 객체 대신에 변경 가능한 객체가 필요했습니다. 그래서 내가 한 것은 초기화 메소드를 사용하여 "NSMutableDictionary"를 만들었다는 것입니다. – tGilani