Я уже некоторое время работаю над своим первым приложением, но мне кажется, что здесь что-то не хватает. Код ниже был первоначально только в моем делегате приложения; Я просто добавил кнопку обновления в первый контроллер представления, чтобы обновить данные, используемые приложением, поэтому моей первой идеей было снова вызвать код делегата приложения внутри контроллера представления, но методы делегирования NSURLConnection
не сработали. Теперь я добавил код в контроллер представления (и также сохранил его в делегате приложения), и методы делегата срабатывают при нажатии кнопки обновления, но responseData
равно нулю, refreshString
пусто и JSONValue
выбрасывает Ошибка «Неожиданный конец ввода» (поскольку ничего не вводится) в журнале (приложение все еще запускается и очищает UITableView, это правильное поведение, поскольку массив теперь пуст). Набор символов данных JSON: UTF-8
Возможно, для этого кода есть лучшее место, где его можно хранить в одном месте и запускать по мере необходимости, и если есть какие-либо предложения, касающиеся этого, я бы тоже их оценил, но моя главная задача - выяснить, почему этот код работает правильно в первый раз, но не работает во второй.
- (void) refreshData{
NSURLRequest *request = [NSURLRequest requestWithURL:[NSURL URLWithString:@"http://beersandears.net/beer-list-json.php?native=yes"]];
[[NSURLConnection alloc] initWithRequest:request delegate:self];
NSLog(@"loadData complete");
}
- (void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response {
[responseData setLength:0];
NSLog(@"Response received");
}
- (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data {
[responseData appendData:data];
NSLog(@"Data received");
}
- (void)connection:(NSURLConnection *)connection didFailWithError:(NSError *)error {
[connection release];
//label.text = [NSString stringWithFormat:@"Connection failed %@", [error description]];
}
- (void)connectionDidFinishLoading:(NSURLConnection *)connection {
[connection release];
connection = nil;
NSString *refreshString = [[NSString alloc] initWithData:responseData encoding:NSUTF8StringEncoding];
[responseData release];
NSDictionary *results = [refreshString JSONValue];
BeerListAppDataObject* theDataObject = [self beerListAppDataObject];
[theDataObject.beerList removeAllObjects];
[theDataObject.mapList removeAllObjects];
[theDataObject.blogList removeAllObjects];
theDataObject.beerList = [results objectForKey:@"beer"];
theDataObject.mapList = [results objectForKey:@"map"];
theDataObject.blogList = [results objectForKey:@"blog"];
NSLog(@"Data Loaded");
[self.tableView reloadData];
}