2

このスクリーンキャストをフォローしました... http://nsscreencast.com/episodes/6-afnetworking

私のシングルトンAFHTTPClientコードは...

+ (MyClient *)sharedInstance
{
    static dispatch_once_t once;
    static MyClient *myClient;
    dispatch_once(&once, ^ { myClient = [[MyClient alloc] initWithBaseURL:[NSURL URLWithString:MyBaseURL]];});
    return myClient;
}

- (id)initWithBaseURL:(NSURL *)url
{
    self = [super initWithBaseURL:url];
    if (self) {
        // these are not actual values but I am setting default headers.
        [self setDefaultHeader:@"sdfg" value:@"4"];
        [self setDefaultHeader:@"std" value:@"3"];
        [self setDefaultHeader:@"reg" value:@"5"];
        [self setDefaultHeader:@"yu" value:@"1"];
        [self setDefaultHeader:@"xv" value:@"3"];
        [self setDefaultHeader:@"hmm" value:@"5"];

        [self registerHTTPOperationClass:[AFJSONRequestOperation class]];
    }
    return self;
}

それから私はそれを次のように実行しています...

[[MyClient sharedInstance] getPath:@"blah.php" parameters:parameters success:^(AFHTTPRequestOperation *operation, id responseObject) {
        NSMutableArray *stats = [NSMutableArray array];

        // it crashes on the next line because responseObject is NSData
        for (NSDictionary *dictionary in responseObject) {
            CCStatistic *stat = [[CCStatistic alloc] initWithDictionary:dictionary];

            [stats addObject:stat];
        }

        self.stats = stats;
        [self.tableView reloadData];
    } failure:^(AFHTTPRequestOperation *operation, NSError *error) {
        NSLog(@"Error retrieving!");
        NSLog(@"%@", error);
    }];

それはすべて正常に動作します。私はCharlesでそれを傍受しました。操作がJSON操作ではないことを除いて、正しいリクエストを送信し、正しいJSONを受信して​​います。

だから、私が期待していたものでresponseObjectはありNSDataません。JSON object

JSON 操作を使用するための設定がありませんか?

4

2 に答える 2

1

リクエストの URL 拡張子がjson.

phpのものはそれを捨てているからです。

コードを変更するとうまくいきました。

私の変化

メソッドではAFJSONRequestOperation...

+ (BOOL)canProcessRequest:(NSURLRequest *)request {
    return [[[request URL] pathExtension] isEqualToString:@"json"] || [super canProcessRequest:request];
}

に変更しました...

+ (BOOL)canProcessRequest:(NSURLRequest *)request {
    // added php to the request valid path extensions.
    return [[[request URL] pathExtension] isEqualToString:@"json"] || [super canProcessRequest:request] || [[[request URL] pathExtension] isEqualToString:@"php"];
}

それ自体は実際にはバグではなく、私に開かれているリクエストのランダムな構文スタイルのようなものです。

.phpリクエストが JSON を返すのは正常ですか?

于 2013-08-27T16:26:46.800 に答える