Привет, у меня есть приложение для iPhone, которое использует ASIFormDataRequest для публикации переменной в php-файл. Затем php-файл возвращает набор кортежей из моей удаленной базы данных в виде ассоциативного массива.
Я использую objectFromJSONString для десериализации данных json (используя инфраструктуру JSONKit), но, печатая данные, я получаю ноль. Вот мой код:
+(NSDictionary*)getQuestions:(NSString*)sectionId from: (NSString*) url{
NSDictionary *questions;
NSURL *link = [NSURL URLWithString:url];
ASIFormDataRequest *request = [ASIFormDataRequest requestWithURL:link];
[request setPostValue:sectionId forKey:@"section"];
NSError *error = [request error];
[request setDelegate:self];
[request setDidFinishSelector:@selector(requestFinished:)];
[request startAsynchronous];
if (!error) {
//NSString *response = [request responseString];
//store them in the dictionary
NSData *data = [NSData dataWithContentsOfURL:[NSURL URLWithString:url]];
NSString *json = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
questions = [json objectFromJSONString];
NSLog(@"%@",questions); //prints null
[json release];
[request release];
}else{
//UIAlertView to warn users there was an error
}
return questions;
}
//doesn't work
- (void)requestFinished:(ASIHTTPRequest *)request
{
//NSString *response = [request responseString];
NSLog(@"hello"); //never prints
}
@ конец
@implementation dbQuestionGetterViewController
@synthesize questions;
-(void)viewDidLoad{
//code to initialise view
NSDictionary* arr = [dbConnector getQuestions:@"2" from:@"http://dev.speechlink.co.uk/David/get_questions.php"];
self.questions = arr;
[super viewDidLoad];
}
@end
Я пытался использовать делегат обратного вызова ASIHTTPRequest (didFinishSelector)
UPDATE:
Вот ссылка на php. Когда вы щелкаете по нему, вы видите, что он правильно выводит JSON:
http://dev.speechlink.co.uk/David/get_questionstest.php
Вот php:
<?php
//connect to database
$dbh = mysql_connect ("localhost", "abc", "123") or die ('I cannot connect to the database because: ' . mysql_error());
mysql_select_db("PDS", $dbh);
$query = mysql_query("SELECT * FROM Questions WHERE sectionId = 1") or die("Error: " . mysql_error());;
$rows = array();
while($r = mysql_fetch_assoc($query)) {
$rows[] = $r;
}
//echo '{"questions":'.json_encode($rows).'}';
echo json_encode($rows);
mysql_close();
?>