需求: 取得相簿資訊後取得第一張圖片並為self.editImageView
賦值顯示.
問題: 但是我現在想在getImageForCollectionView
完全結束後來為self.editImageView
賦值,那麼問題來了,我如何判斷getImageForCollectionView
函數已經進行完畢?
- (void)getImageForCollectionView{
_library = [[ALAssetsLibrary alloc] init];
self.photos = [NSMutableDictionary dictionary];
[_library enumerateGroupsWithTypes:ALAssetsGroupAll usingBlock:^(ALAssetsGroup *group, BOOL *stop) {
if (group) {
NSMutableArray *array = [NSMutableArray array];
[group enumerateAssetsUsingBlock:^(ALAsset *result, NSUInteger index, BOOL *stop) {
if (result) {
[array addObject:result];
}
}];
[self.photos setValue:array forKey:[group valueForProperty:@"ALAssetsGroupPropertyName"]];
}
} failureBlock:^(NSError *error) {
}];
}
黄舟2017-05-16 13:21:19
將耗時的操作放在非主執行緒中,需要UI更新的放在主執行緒中。
__weak typeof(self) weakSelf = self;
dispatch_sync(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
// not in main block task
[weakSelf getImageForCollectionView];
dispatch_async(dispatch_get_main_queue(), ^{
// main block. change ui
NSLog(@"%@", weakSelf.photos);
});
});
EDIT:
- (void)getImageForCollectionView:(void(^)(void))callback {
_library = [[ALAssetsLibrary alloc] init];
self.photos = [NSMutableDictionary dictionary];
dispatch_sync(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
[_library enumerateGroupsWithTypes:ALAssetsGroupAll usingBlock:^(ALAssetsGroup *group, BOOL *stop) {
if (group) {
NSMutableArray *array = [NSMutableArray array];
[group enumerateAssetsUsingBlock:^(ALAsset *result, NSUInteger index, BOOL *stop) {
if (result) {
[array addObject:result];
}
}];
[self.photos setValue:array forKey:[group valueForProperty:@"ALAssetsGroupPropertyName"]];
}
} failureBlock:^(NSError *error) {
}];
dispatch_async(dispatch_get_main_queue(), ^{
callback();
});
});
}
[self getImageForCollectionView:^{
// ...
NSLog(@"%@", self.photos);
}];