2012-04-30 3 views
1

Я создаю приложение рецепта, которое требует доступа к онлайн-базе данных рецептов.Не удается правильно отправить NSData через NSURLRequest

В настоящее время я не могу получить данные на другом конце. Однако я подтвердил, что NSURLRequest приземляется на правильной странице.

Вот код запроса:.

_ __ _ __ м файл

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 File

<?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? Если это не проблема, я хотел бы получить обратную связь о том, что еще происходит неправильно.

ответ

2

Как вы, кажется, уже догадались, эти две линии:

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

не делать то, что вы думаете. Первая строка выделяет новый пустой объект NSData и сохраняет указатель на этот объект в переменной data. Вторая строка извлекает NSDictionary из массива и помещает указатель на него в переменную data. Теперь вы потеряли следы пустого объекта NSData, на который указывали data. Кроме того, вы сохранили неправильный тип указателя в переменной data. Эта переменная должна содержать указатель на NSData, но вы указали на него указатель на NSDictionary. Компилятор не жаловался, потому что -[NSArray objectAtIndex:] возвращает id, который является полностью универсальным указателем на объект. Компилятор не знает, какой объект был фактически извлечен.

Итак, да, вам необходимо принять решение о протоколе связи и формате обмена данными, который вы будете использовать для передачи информации в словаре на сервер. Затем вам нужно преобразовать словарь в этот формат и отправить полученные данные. Вы можете посмотреть NSJSONSerialization.

Смежные вопросы