2

助けてもらえますか?私は絶望的です。私はPHPスクリプトを持っています。パラメータが送信され、何らかの処理が行われ、エコーを使用して結果が出力されます。私は使用しました

[[NSString alloc] initWithData:[NSData dataWithContentsOfURL:[NSURL URLWithString:@"myPHPPathWithParameters"]] encoding:NSUTF8StringEncoding];

以前は、php が NSSTRing としてエコーした情報を取得するために使用していましたが、機能していましたが、現在は機能していません。NULL NSString を返します。とにかく、これを行う正しい方法は、接続の進行状況などを監視するためのデリゲート メソッドを実装するため、NSURLConnection を実装することだと思います。したがって、静的な NSMutableData *receivedData を宣言してから、iOS ドキュメントの例を使用しています。

    NSURLRequest *req=[NSURLRequest 
                          requestWithURL:[NSURL URLWithString:@"http://myphp.php?parameters=paramteres"]
                          cachePolicy:NSURLRequestUseProtocolCachePolicy
                          timeoutInterval:30.0];

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

    if (con)
        receivedData = [[NSMutableData data] retain];
    else 
        NSLog(@"Request failed to load.");

次に、デリゲート メソッドを実装します (自分自身で NSURLConnectionDataDelegate も宣言しています)。

    -(void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data{
    NSLog(@"RECEIVED DATA;");
    [receivedData appendData:data];
}

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

-(void)connectionDidFinishLoading:(NSURLConnection *)connection{
    NSLog(@"FINISHED;");
}

しかし、これらのメソッドは決して呼び出されません! ターミナルには、デリゲート メソッドが実行されたことを示すログ メッセージは表示されません。私が理解しているように、このメソッドが呼び出され、データが receivedData に追加されます。次に、connectionDidFinishLoading メソッドが呼び出されたら、receivedData から NSString を取得する必要があります。助言がありますか?NSURLConnection で同期要求クラス メソッドも試しましたが、そのメソッドは HTML 全体を取得します。php がエコーするものを取得し、アプリ内で使用するために NSString として解析したいだけです :(

4

1 に答える 1

2

receivedData文字列に変換

-(void)connectionDidFinishLoading:(NSURLConnection *)connection{
    NSString *myStringData = [[NSString alloc] initWithData:receivedData encoding:NSStringEncodingConversionAllowLossy];
}

そして、文字列を印刷しますNSLog(@"MyString: %@", myStringData)

于 2012-09-13T14:48:51.150 に答える