YouTube API를 사용하여 일부 동영상을 매우 간단하게 가져 와서 iPhone 앱의 UITableView에 표시하지만 동영상을 가져올 때 테이블이 일시적으로 멈 춥니 다.YouTube API 가져 오기 일시적으로 UITableView가 일시적으로 흔들림
아래의 코드를 호출하여 다음 25 개의 비디오를 가져올 수 있지만 멋지게 작동하지만 가져 오기 프로세스 중에 UITableView가 정지하면 몇 초 후에 가져 오기가 다시 시작됩니다. 이걸 어떻게 막을 수 있는지에 대한 아이디어가 있습니까?
NSURL *url = [[[feeds lastObject] nextLink] URL];
GDataQueryYouTube* query = [GDataQueryYouTube youTubeQueryWithFeedURL:url];
ticket = [service fetchFeedWithQuery:query delegate:self didFinishSelector:@selector(requestAdditional:finishedWithFeed:error:)];
- (void)requestAdditional:(GDataServiceTicket *)ticket finishedWithFeed:(GDataFeedBase *)aFeed error:(NSError *)error
{
[feeds addObject:aFeed];
NSArray *newEntries = [aFeed entries];
for (GDataEntryBase *entry in newEntries)
{
[entry setParent:nil];
[feed addEntry:entry];
}
[self fetchVideoData];
[self dismissViewControllerAnimated:YES completion:^{}];
[self.tableView reloadData];
}
편집 : 나는 [self fetchVideoData];
를 호출 할 때
내가 느린 다운 원인이 무엇 생각이다. 이 메서드에서는 데이터, 비디오 타이틀, 뷰 카운트, 축소판 등 모든 다른 비트를 가져 오는 다른 메서드를 많이 호출합니다.
GCD 메서드의 첫 번째 섹션 안에이 메서드를 배치 한 다음 추가했습니다. 내 이미지를 내 배열에 후자 부분에 있지만 내 배열 그냥 비어 나오는.
다음은 썸네일을 가져 오는 특히 느린 방법의 예입니다. 나는 이것을 보았지만 시도했지만 GCD 방법을 적용하지 못했고,이 상황에서 적용하는 추가 도움을 주시면 감사하겠습니다.
-(void)setThumbnailsArray
{
for (int i = 0; i < [[feed entries] count]; i++)
{
GDataEntryBase *entry = [[feed entries] objectAtIndex:i];
NSArray *thumbnails = [[(GDataEntryYouTubeVideo *)entry mediaGroup] mediaThumbnails];
NSData *data = [NSData dataWithContentsOfURL:[NSURL URLWithString:[[thumbnails objectAtIndex:1] URLString]]];
UIImage *image = [UIImage imageWithData:data];
//No thumbnail, create placeholder using avatar
if (image == nil)
{
UIView *view = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 110, 64)];
[view setBackgroundColor:[UIColor whiteColor]];
UIImageView *avatar = [[UIImageView alloc] initWithImage:[UIImage imageNamed:[NSString stringWithFormat:@"%@Avatar.png", memberName]]];
[avatar setFrame:CGRectMake(0, 0, avatar.frame.size.width - 10, avatar.frame.size.height - 10)];
avatar.center = view.center;
[view addSubview:avatar];
//Create UIImage from the view with the avatar
UIGraphicsBeginImageContextWithOptions(view.bounds.size, view.opaque, 0.0);
[view.layer renderInContext:UIGraphicsGetCurrentContext()];
UIImage * img = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
image = img;
}
[feedThumbnails addObject:image];
}
}
아, 이제 이것을 사용하기위한 몇 가지 권장 사항을 보았습니다. 그러나 작동시키지 못했습니다. 나는 내 질문을 업데이트했다. 아마도 당신은 엿봄, 감사 할 수 있었다. –
타이밍 문제 일 가능성이 높습니다. 여기서도 알림을 사용하는 방법을 고려해 볼 수 있습니다. 무슨 일이 일어나고 있는지 추측하고 있는데, 작업 쓰레드는 [self fetchVideoData] 호출로 분리됩니다. 주 스레드가 작업 스레드가 처리를 완료하기 전에 '새'배열을 잡으려고 시도합니다. 간단한 통지 체계를 구현하는 방법은 http://stackoverflow.com/questions/13954003/reload-uitableview-from-another-tab/13955779#13955779에서 작성한 답변을 확인하십시오. – mElling