1

わかりました。JSONやASIHTTPRequestだけでなく、これに対する答えを見つけるのに苦労しています。しかし、私の質問はもう少し具体的だと思います。私は趣味でプログラムするだけなので、専門家ではありません。そうは言っても、これについての私の抽象的な理解は完全にベースから外れている可能性があるので、質問には答えられないかもしれません。

基本的に、私がやりたいのは、Webサーバー上のpHpスクリプトにHTTPリクエストを送信し、Webサーバーに値を返すようにすることです。たとえば、単純な整数値またはブール値を返します(yes /noを返すログインスクリプトを考えてみてください)。 )。私はこれを理解する方法を簡単にしようとしているので、現時点ではセキュリティについて心配していません。

私が集めたものから、私は何かを使って

// Create the request.
NSURLRequest *theRequest=[NSURLRequest requestWithURL:[NSURL URLWithString:@"http://www.apple.com/"]
                    cachePolicy:NSURLRequestUseProtocolCachePolicy
                timeoutInterval:60.0];
// create the connection with the request
// and start loading the data
NSURLConnection *theConnection=[[NSURLConnection alloc] initWithRequest:theRequest delegate:self];
if (theConnection) {
   // Create the NSMutableData to hold the received data.
   // receivedData is an instance variable declared elsewhere.
receivedData = [[NSMutableData data] retain];
} else {
// Inform the user that the connection failed.
}  

これはAppleのドキュメントからのものであり、私は一般的にこれを理解しています。つまり、URLを介してpHpファイルに情報を送信するとします。

//pHp file gets information
//pHp file uses that information to check against a mySQL database
//pHp now has the variable $result with a value of 1 in it

また、私はそのすべてをうまく行うことができると仮定します。私の質問は、pHpからiOSの「NSMutableData」変数に値を戻すにはどうすればよいかということです。私はそれを「エコー」しますか?例えば:

echo "$result";

そして、それはNSMutableData(変数$ result)に入れられる情報ですか?pHp / HTMLなどを使用して厳密に実行している場合は、セッション変数のようなものを使用して、他のページが変数にアクセスできるようにすることができます。

または、私が知らないデータをNSMutabalDataに返す他のpHp関数はありますか?基本的に、これは私が問題を抱えている2つの間のリンクであり、pHpスクリプトからのデータの返送です。NSMutableDataが「取得」しているのは何なのかよくわかりません。

できるだけ詳しく説明するように心がけましたので、長い質問でごめんなさい。これが私がやろうとしていることのすべてであると仮定して、値を返してください。セキュリティは重要ではありません(私はこれを最も単純なレベルで実行して、セキュリティを理解してから構築しようとしています)。「Webサービスを作成する」や「 _を使用する」などの漠然とした答えを避けようとしています。もっと良い方法はたくさんあると思いますが、プログラムを急いでいるわけではありません。 -NSURLConnection、pHp、NSMUtableData、およびすべての歯車がどのように組み合わされているかをよりよく理解するために、これを学習しようとしています。私が求めていることが技術的に不可能で意味がない場合は、その答えにも感謝します。検索してみましたが、このパズルの1つのピースに対して満足のいく答えが見つかりませんでした。

前もって感謝します。

編集:

私はもう試した

...
NSMutableData *receivedData = [[NSMutableData alloc] init];
receivedData = [[NSMutableData data] retain];
NSString *receivedDataString = [[NSString alloc] initWithData:receivedData encoding:NSUTF8StringEncoding];
label.text = receivedDataString; 
...

これは、基本的にサーバー上のpHpファイルを呼び出します。

<?pHp
$result = "TRUE";
var_dump($result);
?>

これは機能しません。私の問題はpHp側にあると思いますが、NSMutableDataオブジェクトに値を返す特別なコマンドはありますか?(私の質問をもっと明確にするためのいくつかの追加情報)。

編集II:

直接応答できないようです。おそらく、これまで匿名でサイトを使用したことがあり、まったく新しいアカウントを持っているためです:)回答ありがとうチャールズ、echoとvar_dumpを使用しようとしましたが、どちらも送信していないようですデータが戻ってきました(NSStringに変換されたときのNSMutableDataオブジェクトは空のようです-Objective Cが間違っていない限り、私はそれをほぼ最小限に解析したので、そうではないと思います)。

4

2 に答える 2

7

わかりました。うまくいったと思います。他の誰かが同じものを探している場合に備えて、回答を投稿します。

サーバー上のPHPファイルは次のとおりです。

<?php
echo 'Works';
?>

私のhファイルには

#import <UIKit/UIKit.h>

@interface SampleViewController : UIViewController {
IBOutlet UIButton *theButton;
NSMutableData *receivedData;}
@property (nonatomic, retain) IBOutlet UIButton *theButton;
-(IBAction) clickTheButton:(id)sender;
@end

私のmファイルには関連する部分が含まれています(他のすべては、SDKで作成するときにAppleがmファイルに入れる標準的なものです

-(IBAction) clickTheButton:(id)sender {
NSURLRequest *theRequest=[NSURLRequest requestWithURL:[NSURL URLWithString:@"<path to my php file>try.php"]
                                          cachePolicy:NSURLRequestUseProtocolCachePolicy
                                      timeoutInterval:60.0];
NSURLConnection *theConnection=[[NSURLConnection alloc] initWithRequest:theRequest delegate:self];
if (theConnection) {
    receivedData = [[NSMutableData data] retain];
    NSString *receivedDataString = [[NSString alloc] initWithData:receivedData encoding:NSUTF8StringEncoding];
    NSLog(@"This1: %@", receivedData);
    NSLog(@"This2: %@", receivedDataString);
} else {
    // Inform the user that the connection failed.
}
}

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

- (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data {
// Append the new data to receivedData.
// receivedData is an instance variable declared elsewhere.
[receivedData appendData:data];
NSString *receivedDataString = [[NSString alloc] initWithData:receivedData encoding:NSUTF8StringEncoding];
NSLog(@"This4: %@", receivedDataString);
NSLog(@"This5: %@", receivedData);
}

NSLogsの出力は次のとおりです。

This1:'<>'

This2:

This3:'<>'

This4:作品

This5:'<24726573 756c74>'

私の元の質問に答えるために、echo 'Works';Worksという単語をNSMutableDataオブジェクトに返すPHPコードがあります。接続を設定した後didRecieveData:、エコーされた情報を実際にデータファイルに入れるためにメソッドを呼び出す必要がありました。

于 2011-03-22T17:57:00.373 に答える
1

基本的に、これは私が問題を抱えている2つの間のリンクであり、pHpスクリプトからのデータの返送です。NSMutableDataが「取得」しているのは何なのかよくわかりません。

HTTPリクエストを行っているように見える他のすべてのものと同じように機能する場合は、リクエストされたURLからの出力を含む文字列を取得するか、その出力を取得できるオブジェクト(ヘッダーなどを含む)を取得します。 。Objective CやiOSについては何も知りませんが、スクリプトの出力が返されるだけだと賭けます。

言い換えると、

pHpからiOSの「NSMutableData」変数に値を戻すにはどうすればよいですか。私はそれを「エコー」しますか?

おそらく!

コードを試して、何が得られるか見てみませんか?それが機能する場合は、おめでとうございます。最初のWebサービスを作成しました。

于 2011-03-22T16:32:02.423 に答える