1

レシピのオンライン データベースへのアクセスを必要とするレシピ アプリケーションを作成しています。

現在、相手側でデータを受信できません。ただし、NSURLRequest が正しいページに到達していることを確認しました。

リクエストコードは次のとおりです。

_ _ _ __.m ファイル

NSURL *URL = [NSURL URLWithString:@"http://localhost/"];
NSMutableURLRequest *request = [[NSMutableURLRequest alloc] init];
request = [NSMutableURLRequest requestWithURL:URL
                                         cachePolicy:NSURLRequestUseProtocolCachePolicy
                                     timeoutInterval:60.0];

[request setHTTPMethod:@"POST"];

NSURLConnection *connection= [[NSURLConnection alloc] initWithRequest:request delegate:self];

// store recipe
NSString *path = [[NSBundle mainBundle] pathForResource:@"Recipes" ofType:@"plist"];
NSMutableDictionary *dictionaryOfRecipes = [[NSMutableDictionary alloc] initWithContentsOfFile:path];
NSMutableArray *arrayOfRecipes = [dictionaryOfRecipes objectForKey:@"recipesArray"];
NSData *data = [[NSData alloc] init];
data = [arrayOfRecipes objectAtIndex:self.thisRecipeIndex];

// post data
[request setHTTPBody:data];

[connection start];

送信中のデータを印刷する (NSData *) $2 = 0x09071f40 { ingredients = ( "penne pasta", water ); instructions = ( "put the penne in the water", boil ); recipeName = Penne; }

_ ____.php ファイル

<?php
// initialize connection to database
$db = mysql_connect('localhost', 'xxxxxxx', 'xxxxxxx');
$db_name = "project3";
mysql_select_db($db_name, $db);

// store incoming data as php variables
error_log(print_r($_POST, true));
$recipeName = $_POST['recipeName'];

// create mysql query
$query = "INSERT INTO recipeNamesTable (recipeName) VALUES '$recipeName'";
mysql_query($query);

mysql_close($db);
?>

潜在的な問題についていくつか推測していますが、正しいかどうかはわかりません。は[arrayOfRecipes objectAtIndex:self.thisRecipeIndex]ですが、NSDictionaryとして保存しNSDataますが、これはエラーを返さないので、そのままにしておきます。それをそのまま保存してNSDictionaryからに変換する必要がありNSDataますか?これが問題でない場合は、上記の他の問題についてフィードバックをいただければ幸いです。

4

1 に答える 1

2

ご想像のとおり、次の 2 行:

NSData *data = [[NSData alloc] init];
data = [arrayOfRecipes objectAtIndex:self.thisRecipeIndex];

あなたが思うことをしないでください。最初の行は、新しい空のオブジェクトを割り当て、NSDataそのオブジェクトへのポインターをdata変数に格納します。NSDictionary2 行目では、配列から を取得し、それへのポインターをdata変数に入れます。以前は指していた空のNSDataオブジェクトを見失ってしまいました。dataまた、間違った種類のポインターをdata変数に格納しました。その変数は an へのポインターを保持するはずNSDataですが、 an へのポインターを入れてNSDictionaryしまいました。完全に汎用的なオブジェクト ポインターである を-[NSArray objectAtIndex:]返すため、コンパイラは文句を言いませんでした。idコンパイラは、実際に取得されたオブジェクトの種類を知る方法がありません。

したがって、辞書内の情報をサーバーに伝達するために使用する通信プロトコルとデータ交換形式を決定する必要があります。次に、辞書をその形式に変換し、結果のデータを送信する必要があります。あなたは調べるかもしれませんNSJSONSerialization

于 2012-04-30T05:05:18.140 に答える