在通过CKAssets使用Cloudkit中的数据后,我无法再渲染collectionview单元格。我以前使用加载在桌面上的文件夹中的图像进行初始测试。我现在正在使用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 viewcontroller在从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;
}
答案 0 :(得分:1)
好的,我想出来了。我的代码实际上正在运行。由于来自cloudkit的数据存在多线程/异步下载问题,因此未显示collectionview。我按下相机按钮拍摄照片,刷新了CV,CV中的所有内容都出现了。我只需要使用多线程,这样就可以在下载图像时开始渲染。