在下一个视图控制器被推入之前,块没有完成。在segue之前未完成块
- (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 *)赛格瑞发件人:(ID)发送者。通过另一个功能,但做同样的事情,然后该块将工作。 – lee