iPhone JSON Object - PullRequest
       6

iPhone JSON Object

1 голос
/ 22 апреля 2010

Я пытаюсь создать приложение, которое будет извлекать данные JSON из HTTP-запроса, отправлять их главному контроллеру приложения как объект JSON, а затем оттуда выполнять дальнейшую обработку с ним.

Где яНа самом деле я создаю класс, который будет служить классом JSON, в котором он будет принимать URL, захватывать данные и возвращать этот объект.

В одиночку я могу заставить этот класс работать, однако я могуя не могу заставить класс хранить объект для моего главного контроллера, чтобы получить его.

Поскольку я довольно новичок в самом Objective-C, мои мысли таковы, что я испортил свой вызов init:

-initWithURL:(NSString *) value
{
    responseData = [[NSMutableData data] retain];
    NSURL *theURL = [NSURL URLWithString:value];

    NSURLRequest *request = [NSURLRequest requestWithURL:theURL];
    [[NSURLConnection alloc] initWithRequest:request delegate:self];

    return self;
}

Обработка объекта JSON происходит здесь:

- (void)connectionDidFinishLoading:(NSURLConnection *)connection {
    [connection release];

    NSString *responseString = [[NSString alloc] initWithData:responseData encoding:NSUTF8StringEncoding];
    [responseData release];

    NSError *jsonError;
    SBJSON *json = [[SBJSON new] autorelease];
    NSDictionary *parsedJSON = [json objectWithString:responseString error:&jsonError];

    // NSArray object.
    listings = [parsedJSON objectForKey:@"posts"];
    NSEnumerator *enumerator = [listings objectEnumerator];
    NSDictionary* item;

    // to prove that it does work.
    while (item = (NSDictionary*)[enumerator nextObject]) {
        NSLog(@"posts:id = %@", [item objectForKey:@"id"]);
        NSLog(@"posts:address = %@", [item objectForKey:@"address"]);
        NSLog(@"posts:lat = %@", [item objectForKey:@"lat"]);
        NSLog(@"posts:lng = %@", [item objectForKey:@"lng"]);
    }

    [responseString release];

}

Теперь при вызове объекта в основном контроллере у меня есть этот бит кода в вызове метода viewDidLoad:

- (void)viewDidLoad {
    [super viewDidLoad];

    JSON_model *jsonObj = [[JSON_model alloc] initWithURL:@"http://localhost/json/faith_json.php?user=1&format=json"];

    NSEnumerator *enumerator = [[jsonObj listings] objectEnumerator];
    NSDictionary* item;
    //  
    while (item = (NSDictionary*)[enumerator nextObject]) {
        NSLog(@"posts:id = %@", [item objectForKey:@"id"]);
        NSLog(@"posts:address = %@", [item objectForKey:@"address"]);
        NSLog(@"posts:lat = %@", [item objectForKey:@"lat"]);
        NSLog(@"posts:lng = %@", [item objectForKey:@"lng"]);
    }
}

Ответы [ 3 ]

0 голосов
/ 24 апреля 2010

Я думаю, что все происходит в неправильном порядке.

  1. enter viewDidLoad
  2. [JSON_Model initWithURL] вызывается из viewDidLoad
  3. initWithURL начинает извлекать данные асинхронно.
  4. initWithURL завершается и возвращается к viewDidLoad.
  5. viewDidLoad продолжается и отображает пустое содержимое списков

... Проходит время, пока сервер генерирует JSON и возвращаетэто.

connectionDidFinishLoading вызывается после того, как iPhone получает данные connectionDidFinishLoading заполняет списки данными JSON. списки больше не доступны

представление никогда не выполняетсяприказал обновить данные после загрузки и анализа данных JSON.

0 голосов
/ 15 августа 2012

Я нашел этот веб-сайт полезным для использования объекта JSON в моем приложении.

0 голосов
/ 23 апреля 2010

взгляните на проект TouchJSON - http://code.google.com/p/touchcode/wiki/TouchJSON

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...