Приложение для iPhone - JSONKit objectFromJSONString возвращает ноль - PullRequest
0 голосов
/ 14 июля 2011

Привет, у меня есть приложение для 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();

?>

1 Ответ

0 голосов
/ 14 июля 2011

Возвращается ноль, если передаваемая вами строка не является допустимой JSON.

Возможны две вещи:

(1) Вы не анализируетеПравильный ответ сервера - попробуйте вывести строку json, чтобы увидеть, что вы думаете, т.е.

NSString *json = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
NSLog(@"%@", json);

(2) Сервер не отправляет правильный JSON - попробуйте открыть URL-адрес в браузере и убедиться, что он правильныйсформирован.

...