Я создал представление iCarousel и пытаюсь отобразить предварительный просмотр видео в каждой «ячейке»/представлении.
У меня есть видео, хранящиеся в Parse, и я пытаюсь
- Запрос из облака
- Получить данные из PFFile
- Преобразование данных в URL
- Воспроизвести URL с помощью AVPlayer
Вот мой код до сих пор.
-(void)getPast{
dataArray = [[NSMutableArray alloc]init];
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
PFQuery *query = [PFQuery queryWithClassName:@"History"];
[query whereKey:@"Location" containsString:[defaults objectForKey:@"location"]];
[query findObjectsInBackgroundWithBlock:^(NSArray *objects, NSError *error) {
pastArray = [NSMutableArray arrayWithArray:objects];
for (PFObject *files in objects){
PFFile *file = [files objectForKey:@"File"];
[file getDataInBackgroundWithBlock:^(NSData *data, NSError *error) {
[dataArray addObject:data];
}];
}
[self.carouselView reloadData];
}];
}
Я получаю сообщение об ошибке, говорящее, что мой dataArray пуст, я думаю, что проблема здесь может заключаться в том, что, поскольку я выполняю запрос в фоновом режиме, цикл For завершается до того, как я получил данные, и поэтому массив пуст, хотя я мог бы быть неправильно, и я не знаю, как это исправить, даже если я был прав.
Код для отображения превью
- (UIView *)carousel:(iCarousel *)carousel viewForItemAtIndex:(NSUInteger)index reusingView:(UIView *)view {
PFObject *object = [pastArray objectAtIndex:index];
NSData *data = [dataArray objectAtIndex:index];
NSString *dataString = [[NSString alloc]initWithData:data encoding:NSUTF8StringEncoding];
NSURL *URL = [NSURL URLWithString:dataString];
NSLog(@"URL %@",URL);
view = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 200, 275)];
self.playerViewController = [[AVPlayerViewController alloc]init];
self.playerViewController.player = [AVPlayer playerWithURL:URL];
self.playerViewController.view.frame = view.bounds;
self.playerViewController.showsPlaybackControls = NO;
[view addSubview:self.playerViewController.view];
view.autoresizesSubviews = YES;
self.playerViewController.player.actionAtItemEnd = AVPlayerActionAtItemEndNone;
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(playerItemDidReachEnd:) name:AVPlayerItemDidPlayToEndTimeNotification object:self.playerViewController.player.currentItem];
[self.playerViewController.player play];
return view;
}
Как я могу исправить свой код, чтобы каждый просмотр автоматически воспроизводил видео PFFile, соответствующее его индексу в массиве.
Мои проблемы: Массив пуст
Воспроизведение контента для каждого представления не работает
Пс. Я знаю, что не использую PFObject *object.