1

私は継承し、次のようにクラスをリクエストハンドラーとしてAFHTTPClient登録しました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 を Mutable オブジェクトにする必要があります。JSONReadingOptions プロパティがオンになっていることがわかりましたが、AFJSONRequestOperation直接操作しているため、設定方法がわかりませんでしたAFHTTPClient

4

2 に答える 2

1

リクエストの 1 つが失敗し、次のエラーが返されました。

JSON テキストが配列またはオブジェクトで始まっておらず、フラグメントを許可するオプションが設定されていませんでした。

JSONReadingOptions を設定するには、サブクラスAFJSONRequestOperation化し、静的ファクトリ メソッドから返されたインスタンスのプロパティを設定する必要がありました。

+ (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を初期化するときに、クライアントでサブクラスをHTTPOperationClassとして設定します

[__instance registerHTTPOperationClass:[AFJSONRequestOperation class]];

...そしてまた、たまたま打っていたAPIがダウンしていたことが判明したので、htmlエラーページを返していました...

手短に言えば、気にする前に、応答が不十分に形成されているだけでなく、そもそも存在することを確認してください。

于 2013-03-16T16:17:12.157 に答える