Я больше не могу отображать ячейки коллекции после использования данных из 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;
}