Я столкнулся с какой-то странной проблемой. Один из моих NSURLSessions отвечает за получение информации для информации о ресторанах, которую я сохранил (название ресторана, URL логотипа ресторана и т. Д.), А затем второй NSURLSession отвечает за использование URL логотипа ресторана, чтобы получить конкретное изображение и установить его для каждой ячейки UITableView.Несколько NSURLSessions, вызывающие проблемы UITableView
Проблема заключается в том, что мой UITableView вообще не загружает ничего, поэтому ячейки пустые, но в другое время, когда я добавляю дополнительный [_tableView reload]
в блок завершения NSURLSessions в методе fetchPosts, он будет но затем ячейки перестанут отображать что-либо снова, если я снова запустил его. Что-то определенно неправильно. Посмотрите на мой код ниже:
#import "MainViewController.h"
#import "SWRevealViewController.h"
#import "RestaurantNameViewCell.h"
#import "RestaurantList.h"
@interface MainViewController()
@end
@implementation MainViewController
- (void)viewDidLoad
{
[super viewDidLoad];
//List of restaurants needed to load home page
_restaurantInformationArray = [[NSMutableArray alloc] init];
self.tableView.dataSource = self;
self.tableView.delegate = self;
//setup for sidebar
SWRevealViewController *revealViewController = self.revealViewController;
if (revealViewController)
{
[self.sidebarButton setTarget: self.revealViewController];
[self.sidebarButton setAction: @selector(revealToggle:)];
[self.view addGestureRecognizer:self.revealViewController.panGestureRecognizer];
}
//Get list of restaurants and their image URLs
[self fetchPosts];
}
- (void)didReceiveMemoryWarning
{
[super didReceiveMemoryWarning];
// Dispose of any resources that can be recreated.
}
-(NSInteger)numberOfSectionsInTableView:(UITableView *)tableView {
return 1;
}
-(NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
return [_restaurantInformationArray count];
}
-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
RestaurantNameViewCell *cell = (RestaurantNameViewCell *)[_tableView dequeueReusableCellWithIdentifier:@"restaurantName" forIndexPath:indexPath];
RestaurantList *currentRestaurant = [_restaurantInformationArray objectAtIndex:indexPath.row];
cell.restaurantName.text = currentRestaurant.name;
cell.imageAddress = currentRestaurant.imageURL;
cell.restaurantClicked = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(tapDetected:)];
cell.restaurantClicked.numberOfTapsRequired = 1;
cell.restaurantLogo.userInteractionEnabled = YES;
[cell.restaurantLogo addGestureRecognizer:cell.restaurantClicked];
cell.restaurantLogo.tag = indexPath.row;
//Add restaurant logo image:
NSString *URL = [NSString stringWithFormat:@"http://private.com/images/%@.png",cell.imageAddress];
NSURL *url = [NSURL URLWithString:URL];
NSURLSessionDownloadTask *downloadLogo = [[NSURLSession sharedSession]downloadTaskWithURL:url completionHandler:^(NSURL *location, NSURLResponse *response, NSError *error) {
UIImage *downloadedImage = [UIImage imageWithData:[NSData dataWithContentsOfURL:location]];
cell.restaurantLogo.image = downloadedImage;
}];
[downloadLogo resume];
return cell;
}
-(void)fetchPosts {
NSString *address = @"http://localhost/xampp/restaurants.php";
NSURL *url = [NSURL URLWithString:address];
NSURLSessionDataTask *downloadRestaurants = [[NSURLSession sharedSession]dataTaskWithURL:url completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
NSError *someError;
NSArray *restaurantInfo = [NSJSONSerialization JSONObjectWithData:data options:kNilOptions error:&someError];
for(NSDictionary *dict in restaurantInfo) {
RestaurantList *newRestaurant = [[RestaurantList alloc]init];
newRestaurant.name = [dict valueForKey:@"name"];
newRestaurant.imageURL = [dict valueForKey:@"image"];
[_restaurantInformationArray addObject:newRestaurant];
//Refresh table view to make sure the cells have info AFTER the above stuff is done
[_tableView reloadData];
}
}];
[downloadRestaurants resume];
}
@end
Это, наверное, очень глупая ошибка, что я делаю, но я не уверен, как я должен это исправить. Я новичок в разработке iOS, поэтому очень ценю некоторые рекомендации :)
Что вы подразумеваете под словом «он снова останавливается, если я его заново заново»? Вы имели в виду, что он не приносит результатов, если вы повторно запускаете свое приложение? – Jeff
@Jeff Как и клетки, ничего не будет отображаться. – pwoerfulafhjksdh
@Jeff, что вы думаете? – pwoerfulafhjksdh