0

私は奇妙な問題に直面しています。Asynchronus NSUrlrequest呼び出しを送信していますが、その見返りに、jsonの一部で複数回応答します

誰かが私が間違ったことを手伝ってくれませんか。

コード

NSString *_query = @"http://abc.com/index.php";

    NSData *myRequestData = [NSData dataWithBytes:[_requestString UTF8String] 
                                       length:[_requestString length]];


    __block NSMutableURLRequest *request = [[NSMutableURLRequest alloc] initWithURL:[NSURL URLWithString:_query]]; 

    [request setHTTPMethod: @"POST" ];
    [request setValue:@"application/x-www-form-urlencoded" forHTTPHeaderField:@"content-type"];
    [request setHTTPBody: myRequestData ];

    [[NSURLConnection alloc] initWithRequest:request delegate:self];

    NSRunLoop *runLoop = [NSRunLoop currentRunLoop];

    [runLoop addTimer:timeOutTimer forMode:NSDefaultRunLoopMode];

応答

- (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data 
{
    // check is response is a valid JSON?
    NSError *error;

    id jsonObj = [NSJSONSerialization JSONObjectWithData: data options:kNilOptions error:&error];
    BOOL isValid = [NSJSONSerialization isValidJSONObject:jsonObj];


    NSString *content = [[NSString alloc] initWithData:data 
                                              encoding:NSUTF8StringEncoding];

    NSLog(@"Content: %@",content);

    if (isValid)
    {
        NSDictionary *data = [content JSONValue];
    }


    [content release];
}
4

1 に答える 1

2

クライアントがデータを受信すると、このコールバックが呼び出されます。

- (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data

didReceiveDataは、データを受信するときにデータを提供し、データのチャンクを使用して複数回呼び出すことができます。

NSURLConnectionドキュメントから:

データが受信されると、デリゲートには定期的にconnection:didReceiveData:メッセージが送信されます。デリゲートの実装は、新しく受信したデータを保存する責任があります。

それらのドキュメントから:

- (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data
{
    // Append the new data to receivedData.
    // receivedData is an instance variable declared elsewhere.
    [receivedData appendData:data];
}

すべてが完了すると、connectionDidFinishLoadingが呼び出され、追加されたデータを使用できるようになります。

最後に、接続がリクエストのダウンロードに成功すると、デリゲートはconnectionDidFinishLoading:メッセージを受信します。デリゲートは接続に関するメッセージをそれ以上受信せず、NSURLConnectionオブジェクトを解放できます。

于 2012-08-21T11:32:25.957 に答える