Я пытаюсь заполнить изображения из камеры в табличном представлении.
в ViewDidLoad
я создаю группу активов.
- (void)viewDidLoad
{
[super viewDidLoad];
self.tableView.delegate = self;
self.tableView.dataSource = self;
self.assetsLibrary = [[ALAssetsLibrary alloc] init];
[self.assetsLibrary enumerateGroupsWithTypes:ALAssetsGroupSavedPhotos usingBlock:^(ALAssetsGroup *group, BOOL *stop) {
if(nil!=group){
[group setAssetsFilter:[ALAssetsFilter allPhotos]];
self.assetGroup = group;
NSLog(@"%d images found", self.assetGroup.numberOfAssets);
}
} failureBlock:^(NSError *error) {
NSLog(@"block fucked!");
}];
[self.tableView reloadData];
}
в CellForRowAtIndexPath
я использую фоновую очередь GCD для заполнения ячеек изображением по соответствующему индексу.
static NSString *CellIdentifier = @"Cell";
dispatch_queue_t imgLoadQueue = dispatch_queue_create("Thumb loader", NULL);
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (cell == nil) {
cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier];
cell.accessoryType = UITableViewCellAccessoryDisclosureIndicator;
}
dispatch_async(imgLoadQueue, ^{
[self.assetGroup enumerateAssetsAtIndexes:[NSIndexSet indexSetWithIndex:indexPath.row] options:0 usingBlock:^(ALAsset *result, NSUInteger index, BOOL *stop) {
if (nil != result) {
ALAssetRepresentation *repr = [result defaultRepresentation];
UIImage *img = [UIImage imageWithCGImage:[repr fullResolutionImage]];
cell.imageView.image = img;
}
}];
});
return cell;
Проблема в том, что исходные ячейки пусты. Изображения начинают загружаться только после того, как я начинаю прокручивать. И это тоже, приложение вылетает, как только я прокручиваю. Я новичок в GCD и, похоже, не использую его правильно. Любая помощь в этом вопросе приветствуется.
@property (nonatomic, readwrite) ALAssetsLibrary *assetsLibrary;
и@property (nonatomic, readwrite) ALAssetsGroup *assetGroup;
- person CalZone   schedule 01.06.2013