1

クライアントからサーバーへの非同期呼び出しを行い、サーバーにデータを出力しています。しかし、クライアントで得た応答はnullとして来ています

私の応答検索部分は次のとおりです:-

- (void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response
{
    [receivedData setLength:0];
    NSLog(@"connection did receive response");

}


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

    [receivedData appendData:data];

    NSLog(@"connection did receive data");
}


- (void)connection:(NSURLConnection *)connection
  didFailWithError:(NSError *)error
{
    // inform the user
    NSLog(@"Connection failed! Error - %@ %@",

    [error localizedDescription],
    [[error userInfo] objectForKey:NSURLErrorFailingURLStringErrorKey]);
}


- (void)connectionDidFinishLoading:(NSURLConnection *)connection
{
    // receivedData is declared as a method instance elsewhere
    NSString *responseFromServer = [[NSString alloc]initWithData:receivedData encoding:NSUTF8StringEncoding]; 
    NSLog(@"connection did finish load");
    NSLog(@"response from the server=%@", responseFromServer);
 }

したがって、「responseFromServer」の値は null になります。

どこが間違っているのか誰にも教えてもらえますか。前もって感謝します。

4

2 に答える 2

0

receivedDataUTF8 でエンコードされたデータ = 文字列が含まれていますか? initWithData:encoding:ドキュメンテーション ...

戻り値

エンコーディングを使用してデータ内のバイトを Unicode 文字に変換することによって初期化された NSString オブジェクト。返されたオブジェクトは、元の受信者とは異なる場合があります。初期化が何らかの理由で失敗した場合 (たとえば、データがエンコードに有効なデータを表していない場合) は、nil を返します。

...ご覧のとおり、初期化が失敗した場合は nil を返します。

于 2012-10-01T13:40:34.060 に答える
0

receivedData を強く参照していない場合は、それを開始することをお勧めします。

receivedData = [NSMutableData data];自動解放されたオブジェクトです。receivedData が強力なプロパティまたは保持されたプロパティであることを確認してから、そのように設定しますself.receivedData = [NSMutableData data];

最終的な connectionDelegate メソッドが起動する前に receivedData が自動解放される可能性があるため、responseString は initWithData メソッドで nil データを使用しています。

于 2012-10-01T17:30:26.047 に答える