Можете ли вы установить значения источника данных tableView в "connectionDidFinishLoading"? - PullRequest
0 голосов
/ 10 декабря 2010

Я работаю над своим первым примером JSON в target-c и наткнулся на это замечательное руководство, которое я пытаюсь воспроизвести. По пути я решил вставить JSON, возвращенный в мой уже работающий tableView (только для того, чтобы убедиться, что я могу что-то сделать с данными в представлении).

- (void)viewDidLoad {
    [super viewDidLoad];

  responseData = [[NSMutableData data] retain];
    NSURLRequest *request = [NSURLRequest requestWithURL:[NSURL URLWithString:@"http://www.unpossible.com/misc/lucky_numbers.json"]];
    [[NSURLConnection alloc] initWithRequest:request delegate:self];
}

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

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

    NSArray *luckyNumbers = [responseString JSONValue];

    NSMutableString *text = [NSMutableString stringWithString:@"Nums "];

    for (int i = 0; i < [luckyNumbers count]; i++)
        [text appendFormat:@"%@", [luckyNumbers objectAtIndex:i]];

  self.movies = [[NSArray alloc] initWithObjects:@"First", text, @"Last", nil];
}

Что я обнаружил, так это то, что когда я устанавливаю массив в "connectionDidFinishLoading", он отображается как ничто в работающем приложении - однако, если я устанавливаю это непосредственно в методе "viewDidLoad" с 3 простыми строковыми значениями, он хорошо отображается .

Когда я отлаживаю работающее приложение, я вижу ответ JSON, и строка выглядит корректно (никаких проблем, которые я вижу).

Источник данных для моего tableView уже установлен в камне до этого метода "connectionDidFinishLoading" или я что-то пропустил?

Ответы [ 2 ]

2 голосов
/ 10 декабря 2010

Ваш UITableView будет запрашивать свои DataSource для данных один раз первоначально, предположительно через некоторое время после viewDidLoad.После этой первой загрузки он будет запрашивать данные только по мере необходимости (т.е. при прокрутке в разные ячейки). Если вы хотите, чтобы он обновлял содержимое, когда ваши данные готовы (например, после того, как вы получили данные URL)Звоните [tableView reloadData].

0 голосов
/ 19 декабря 2010

Мой первоначальный вопрос был решен этим решением:

В конце моего метода «connectionDidFinishLoading» я вызываю метод в appDelegate с именем «jsonFinished».

- (void)connectionDidFinishLoading:(NSURLConnection *)connection {
  //do all the json work and set the array that I'm using as my datasource

  self.movies = [[NSArray alloc] initWithObjects:@"First", "Last", nil];

  [appDelegate jsonFinished]; //have the app delegate do the refresh call back
}

Затем внутри appDelegate я просто предоставляю реализацию метода "jsonFinished", который обновляет UITableView

- (void)jsonFinished
{
  moviesController.refreshDisplay;
}

И в методе «refreshDisplay» я делаю reloadData для tableView

- (void)refreshDisplay
{
    [moviesTableView reloadData];
}

И теперь после загрузки данных appDelegate запускает метод, который перезагружает данные для tableView

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