заполнить UITableView из JSON - PullRequest
4 голосов
/ 03 июня 2010

Я пытаюсь заполнить UITableView данными из результата json. Я могу получить его для загрузки из plist массива без проблем, и я даже могу увидеть мой JSON. У меня проблема в том, что UITableView никогда не увидит результаты json. пожалуйста, потерпите меня, так как это мой первый раз с Objective-C.

В моем .h файле

@interface TableViewViewController : UIViewController <UITableViewDataSource, UITableViewDelegate> {
    NSArray *exercises;
    NSMutableData *responseData;

}

В моем .m файле

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
    return  exercises.count;
}

- (UITableViewCell *)tableView:(UITableView *)tableView 
         cellForRowAtIndexPath:(NSIndexPath *)indexPath {
    //create a cell
    UITableViewCell *cell = [[UITableViewCell alloc]
    initWithStyle:UITableViewCellStyleDefault
    reuseIdentifier:@"cell"];

    // fill it with contnets
    cell.textLabel.text = [exercises objectAtIndex:indexPath.row];
    // return it
    return cell;
}


// Implement viewDidLoad to do additional setup after loading the view, typically from a nib.
- (void)viewDidLoad {       
    responseData = [[NSMutableData data] retain];
    NSURLRequest *request = [NSURLRequest requestWithURL:[NSURL URLWithString:@"http://url_to_json"]];
    [[NSURLConnection alloc] initWithRequest:request delegate:self ];


    // load from plist
    //NSString *myfile = [[NSBundle mainBundle] pathForResource:@"exercise" ofType:@"plist"];
    //exercises = [[NSArray alloc] initWithContentsOfFile:myfile];
    [super viewDidLoad];
}

- (void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response {
    [responseData setLength:0];
}
- (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data {
    [responseData appendData:data];
}

- (void)connection:(NSURLConnection *)connection didFailWithError:(NSError *)error {
    NSLog(@"Connection failed: %@", [error description]);
}

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

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

    NSDictionary *dictionary = [responseString JSONValue];
    NSArray *response = [dictionary objectForKey:@"response"];

    exercises = [[NSArray alloc] initWithArray:response];
}

Ответы [ 3 ]

14 голосов
/ 03 июня 2010

Вы должны указать свой вид таблицы для перезагрузки.Попробуйте добавить:

[tableView reloadData];

в конце вашего метода -connectionDidFinishLoading.

1 голос
/ 27 июля 2010

Использование

[self.tableView reloadData];
0 голосов
/ 30 января 2012

Возможно, вам потребуется добавить следующую строку кода в конце вашего метода connectionDidFinishLoading:

[self.tableView performSelectorOnMainThread:@selector(reloadData) withObject:nil waitUntilDone:NO];

Это обновит UITableView в основном потоке, так как connectionDidFinishLoading выполняется в другом потоке.

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