Ячейки Collectionview не будут отображаться с помощью CKAsset

Я больше не могу отображать ячейки коллекции после использования данных из Cloudkit через CKAssets. Раньше я использовал изображения, загруженные в папку на моем рабочем столе, только для первоначального тестирования. Сейчас я использую Cloudkit и создал несколько тестовых записей через панель управления CK, используя те же изображения. Мне удалось запросить базу данных CK и получить ожидаемые записи. Затем я изменил свой код, чтобы заполнить данные модели для ячеек, чтобы использовать данные CK. Эти данные ранее поступали из изображений, полученных локально. Из журнала видно, что я успешно получаю данные от CK, включая изображения. Я также вижу из журнала, что мои пользовательские ячейки CV больше не инициализируются. Насколько я могу судить, мой код выглядит хорошо, судя по примерам, которые я видел в Интернете.

Кто-нибудь может мне с этим помочь? Благодарю вас!

Назначенный инициализатор в модели...

- (instancetype)initImagesForSelection:(NSString *)selectionType {

    self = [super init];

    if (self) {
        CKDatabase *publicDatabase = [[CKContainer defaultContainer] publicCloudDatabase];
        NSPredicate *predicate = [NSPredicate predicateWithFormat:@"ImageDescription = 'description'"];
        CKQuery *query = [[CKQuery alloc] initWithRecordType:@"ImageData" predicate:predicate];

        [publicDatabase performQuery:query inZoneWithID:nil completionHandler:^(NSArray *results, NSError *error) {
            // handle the error
            if (error) {
                NSLog(@"Error: there was an error querying the cloud... %@", error);
            } else {
                // any results?
                if ([results count] > 0) {
                    NSLog(@"Success querying the cloud for %lu results!!!", (unsigned long)[results count]);
                    for (CKRecord *record in results) {
                        ImageData *imageData = [[ImageData alloc] init];
                        CKAsset *imageAsset = record[@"Image"];
                        imageData.imageURL = imageAsset.fileURL;
                        NSLog(@"asset URL: %@", imageData.imageURL);
                        imageData.imageName = record[@"ImageName"];
                        //imageData.image = [UIImage imageWithData:[NSData dataWithContentsOfURL:imageAsset.fileURL]];
                        imageData.image = [UIImage imageWithContentsOfFile:imageAsset.fileURL.path];
                        NSLog(@"image size height:%f, width:%f", imageData.image.size.height, imageData.image.size.width);
                        [self.imageDataArray addObject:imageData];
                    }
                    NSLog(@"imageDataArray size %lu", (unsigned long)[self.imageDataArray count]);
                }
            }
        }];
    }

    return self;
}

Контроллер представления Collectionview, который отлично работал до извлечения данных из Cloudkit...

- (UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath {

    static NSString *CellIdentifier = @"Cell"; // string value identifier for cell reuse
    ImageViewCell *cell = [collectionView dequeueReusableCellWithReuseIdentifier:CellIdentifier forIndexPath:indexPath];
    NSLog(@"cellForItemAtIndexPath: section:%ld row:%ld", (long)indexPath.section, (long)indexPath.row);
    cell.layer.borderWidth = 1.0;
    cell.layer.borderColor = [UIColor grayColor].CGColor;

    ImageData *imageData = [self.imageLoadManager imageDataForCell:indexPath.row];

    cell.imageView.image = imageData.image;

    cell.imageView.contentMode = UIViewContentModeScaleAspectFit; 

    return cell;
}

person SonnyB    schedule 27.10.2014    source источник


Ответы (1)


Хорошо, я понял это. Мой код действительно работал. Представление коллекции не отображалось из-за проблемы с многопоточностью/асинхронной загрузкой данных из облачного набора. Я нажал кнопку камеры, чтобы сделать снимок, который обновил резюме, и все, что есть в резюме, появилось. Мне просто нужно использовать многопоточность, чтобы все начинало отображаться во время загрузки изображений.

person SonnyB    schedule 29.10.2014