iPhone UITableView заполняется от подключенияDidFinishLoading - PullRequest
1 голос
/ 07 февраля 2010

Я часами пытался понять это. У меня есть JSON от NSURLConnection. Это работает нормально, и я проанализировал его в массив. Но я не могу получить массив из метода connectionDidFinishLoading. Я получаю (null) в методе UITableViewCell. Я предполагаю, что это вопрос сохранения, но я так плохо знаком с ObjC, что не уверен, что делать Любая помощь будет принята с благодарностью.
Приветствия.

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

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

SBJSON *json = [[SBJSON alloc] init];

NSDictionary *results = [json objectWithString:responseString];

self.dataArray = [results objectForKey:@"data"];

NSMutableArray *tableArray = [[NSMutableArray alloc] initWithObjects:nil];

for (NSString *element in dataArray) {
    //NSLog(@"%@", [element objectForKey:@"name"]);
    NSString *tmpString = [[NSString alloc] initWithString:[element objectForKey:@"name"]];
    [tableArray addObject:tmpString];
}
}

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {

static NSString *CellIdentifier = @"Cell";

UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (cell == nil) {
    cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier] autorelease];
}

// Configure the cell.
//cell.textLabel.text = [self.tableView objectAtIndex:indexPath.row];

cell.textLabel.text = [self.tableArray objectAtIndex:indexPath.row];
NSLog(@"%@", tableArray);
return cell;

}

Ответы [ 4 ]

2 голосов
/ 07 февраля 2010

Решение:
Приняв совет kubi и st3fan с self.tableArray, я обнаружил, что мне нужно перезагрузить tableView с помощью [self.tableView reloadData];

0 голосов
/ 13 сентября 2010

У меня была та же проблема, и я решил ее, перезагрузив таблицу.

Я вставил эту строку в конец функции connectionDidFinishLoading

[self.tableView reloadData];    

и все работает.

0 голосов
/ 07 февраля 2010

В connectionDidFinishLoading: вы используете объявить tableArray в качестве локальной переменной. Поэтому он никогда не будет присвоен self.tableArray.

0 голосов
/ 07 февраля 2010
  1. Избавьтесь от [connection release] во 2-й строке. Объект connection поставляется с автоматическим выпуском, поэтому это может вызвать сбои.
  2. Похоже, у вас есть свойство с именем tableArray? Если это так, вы переделываете имя в этом методе (вы должны были получить предупреждение компилятора).

Если подумать, вот как должна выглядеть вторая половина метода:

NSMutableArray *tmpArray = [[NSMutableArray alloc] initWithObjects:nil];

for (NSString *element in dataArray) {
    [tmpArray addObject:[element objectForKey:@"name"]];
}

self.tableArray = tmpArray;
[tmpArray release];
...