0

iOS で http クライアントからデータを取得する際に問題が発生しています。これはクライアントクラスの私のコードです

@synthesize receivedData;

- (void) HTTPRequest1 :(NSURL *) url {
        NSURLRequest *req = [NSURLRequest requestWithURL: url cachePolicy:NSURLRequestUseProtocolCachePolicy timeoutInterval:60.0];

    NSURLConnection *connect = [[NSURLConnection alloc] initWithRequest:req delegate:self];


    if (connect) {
        receivedData =[NSMutableData data];

    }
    else {

    }


}

-(void) connection:(NSURLConnection*) connection didReceiveResponse:(NSURLResponse *)response{
    [self.receivedData setLength:0];


}

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

        [self.receivedData appendData:data];
    //receivedData

}

- (void)connection:(NSURLConnection *)connection
  didFailWithError:(NSError *)error
{

    NSLog(@"Connection failed! Error - %@ %@",
          [error localizedDescription],
          [[error userInfo] objectForKey:NSURLErrorFailingURLStringErrorKey]);
}

- (void)connectionDidFinishLoading:(NSURLConnection *)connection
{

    NSLog(@"Succeeded! Received %d bytes of data",[receivedData length]);



}

しかし、このクライアントからデータを取得しようとすると:

NSURL *url = [NSURL URLWithString:@"http://ya.ru"];
MAHTTPClient *client = [MAHTTPClient alloc];
[client HTTPRequest1:url];
 NSMutableData *data = client.receivedData;

data 変数は空ですが、データは受信されました (NSLog は数バイトのデータをダウンロードしたという事実を示しました)。問題は、サーバーからまだダウンロードされていないときにアプリがデータを取得しようとしていることです (200 ミリ秒の差があります) connectionDidFinishLoading が呼び出されるまでメインスレッドを待機させる方法はありますか?

4

1 に答える 1

0

ここに割り当てている NSMutableData:

if (connect) {
    receivedData =[NSMutableData data];

}
else {

}

自動解放されたオブジェクトを返すメソッドを使用しているため、おそらく自動解放されています。

次のようなことを行う必要があります。

self.receivedData = [NSMutableData data]; 

receivedData が strong/retain プロパティである場合、または

receivedData = [[NSMutableData alloc] init]; 

// ただし、ここでメモリ リークが発生していないことを確認するには、メモリ管理ルールを理解する必要があります。

于 2012-08-02T12:04:46.107 に答える