Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

populate UITableView from json

I am trying to populate a UITableView with data from json result. I can get it to load from plist array no problem and I can even see my json. The problem I'm having is that the UITableView never gets to see the json results. please bear with me as this is my first time with Objective-C.

In my .h file

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

}

In my .m file

- (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];
}
like image 523
mcgrailm Avatar asked Dec 07 '22 03:12

mcgrailm


2 Answers

You need to tell your table view to reload. Try adding:

[tableView reloadData];

at the end of your -connectionDidFinishLoading method.

like image 168
Matt Long Avatar answered Dec 21 '22 04:12

Matt Long


Use

[self.tableView reloadData];
like image 25
sanjeev Avatar answered Dec 21 '22 04:12

sanjeev