다음보기 컨트롤러를 푸시하기 전에 블록이 완료되지 않았습니다.블록 전에 완료되지 않았습니다.
- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {
if ([[segue identifier] isEqualToString:@"ResultsView"])
{
[self.spinner startAnimating];
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
NSMutableArray *results = [[NSMutableArray alloc] init];
results = [self generateResults];
dispatch_async(dispatch_get_main_queue(), ^{
[self.spinner stopAnimating];
ResultViewController *controller = [segue destinationViewController];
controller.results = results;
});
});
}
}
이는 generateResults 방법입니다 : 지연 또는 구조 조정 다음과 같은 방법에 대한 어떤 제안 내가 파견 한 후 동기화, 같은 문제를 사용하지 않는 경우, 또는
- (NSMutableArray *)generateResults
{
ALAssetsLibrary *library = [[ALAssetsLibrary alloc] init];
__block NSMutableArray *matches = [[NSMutableArray alloc] init];
[library enumerateGroupsWithTypes:ALAssetsGroupAll
usingBlock:^(ALAssetsGroup *group, BOOL *stop)
{
if (group) {
[group setAssetsFilter:[ALAssetsFilter allPhotos]];
[group enumerateAssetsUsingBlock:^(ALAsset *asset, NSUInteger index, BOOL *stop){
if (asset)
{
//work done here.
}
}];
}
} failureBlock:^(NSError *error) {
}];
return matches;
}
는 블록 생성 결과가 너무 늦게 완료되었습니다. 다음보기 컨트롤러가 이미 나타나서 0 개의 찾기를 표시합니다.
변경 (제공 스토리 보드의 푸시보기를 사용하지 않음)와 기능 대체 - (무효) prepareForSegue : (UIStoryboardSegue *) SEGUE 보낸 사람 : (ID) 보낸 사람을. 다른 기능에 의해하지만 같은 것들을 않습니다. 그럼 블록은 일을 할 것입니다. – lee