2014-10-15 2 views
-1

У меня есть кнопки в динамических ячейках моего UITableViewController. Я поставил их там программно с кодом ниже. Если я нажму кнопку, то UITableView исчезнет, ​​и я получу пустой экран. Когда я возвращаюсь на ViewController и снова возвращаюсь к UITableViewController, все кажется нормальным + URLConnection выполнил свою работу. Что не так с моим кодом?Перезагрузка UITableView после нажатия UIButton в UITableViewCell

UIButton *button=[UIButton buttonWithType:UIButtonTypeRoundedRect]; 
[button addTarget:self action:@selector(voteButton:) forControlEvents:UIControlEventTouchDown]; 
button.frame = CGRectMake(276, 0, 44.0, 44.0); 
[cell.contentView addSubview:button]; 

Метод, который она вызывает является voteButton:

- (void) voteButton:(UIButton *) sender { 

    NSString *urlstring = [NSString stringWithFormat:@"http://www.someurl.com", (long)sender.tag]; 
    NSString *webStringURl = [urlstring stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding]; 

    NSURL *jsonFileUrl = [NSURL URLWithString:webStringURl]; 

    NSURLRequest *urlRequest = [[NSURLRequest alloc] initWithURL:jsonFileUrl]; 

    [NSURLConnection connectionWithRequest:urlRequest delegate:self]; 

    [self.tableView reloadData]; 
} 

Как я могу перезагрузить UITableView после нажатия кнопки?

ОТВЕТ

NSURLConnection не была закончена до TableView был перезагружен, чтобы он не смог ничего показать. Я положил [self.tableview reloadData]; в функцию с connectionDidFinishLoading, и теперь нажатие кнопки работает.

ответ

1

Добро пожаловать в мир асинхронной сети. Нажатие кнопки

[NSURLConnection connectionWithRequest:urlRequest delegate:self] 

Теперь соединение начинается. Но это еще не кончилось. Это не заканчивается, пока делегату не будет сказано, что он заканчивается. Поэтому, если вы хотите что-то сделать, когда соединение закончит делать все, что он делает, сделайте это в ответ на сообщение делегата NSURLConnection.

Ваш вызов reloadData это слишком рано, потому что связь только начался - он еще не закончился (на самом деле, это, вероятно, еще даже не началась). Это звучит из вашего описания, так как было время уничтожить ваши данные, но еще не время его заменить!

+0

Хорошо, я понимаю, что вы говорите, но у меня есть несколько NSURLConnections в моем UITableViewController, как функция connectionDidFinishLoading теперь, с которой NSURLConnection только что закончилась? –

+0

@ speetje33 создает NSURLConnection как переменную для всего файла .m. Затем, когда он закончит загрузку, проверьте, что запрос url равен переменной. Или вы можете сделать синхронный запрос, если это всего лишь небольшие объемы данных. –

+0

Спасибо, я получил его работу. Я выполнил следующие инструкции: [link] (http://stackoverflow.com/questions/9062393/how-can-we-handle-multiple-nsurlconnection-in-iphone-xcode) –

Смежные вопросы