UICollectionView重新加载数据

时间:2015-09-21 13:38:51

标签: ios objective-c core-data uicollectionview

经过一番研究后,我无法找到问题的答案,所以让我解释一下。

用户可以创建一个可以包含文本,音频和图像的对象,但他不需要添加全部三个。稍后,可以编辑它来添加图像。那部分就像一个魅力。现在,我的问题是,我有一个集合视图来显示添加的所有图像,如果图像最初添加到对象,它将正常运行。如果用户编辑添加图像的对象,则只有在创建带图像的新对象时才会显示此新图像。

在resume(tl; dr version)中,如果在编辑对象模式下添加图像,则只有在新对象模式下添加新图像后才会显示图像。

以下是在新对象模式下获取图像的方法

NSData *imageData = UIImageJPEGRepresentation(self.image, 0.8f);
    [self.obj setValue:imageData forKey:@"photo"];

如果它没有图像,也会发生这种情况

self.image = [info objectForKey:UIImagePickerControllerOriginalImage];
    NSData *imageData = UIImageJPEGRepresentation(self.image, 0.8f);

    [self.stPhoto setImage:self.image];
    self.obj.photo = imageData;
    [self.obj setValue:imageData forKey:@"photo"];

使用上下文保存和所有内容正确保存。

现在,这就是我如何从核心数据中获取图像以便在编辑模式下显示(如果有的话)

self.image = [[UIImage alloc]initWithData:self.obj.photo];

这里没问题,只是为了提供更多信息

现在我们找到麻烦的部分。这是我获取的地方,调用我创建的一个方法来循环字典并重新加载

NSManagedObjectContext *managedObjectContext = [self managedObjectContext];
NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] initWithEntityName:@"MyObject"];
[fetchRequest setResultType:NSDictionaryResultType];
[fetchRequest setPropertiesToFetch:[NSArray arrayWithObjects:@"photo", nil]];
self.photos = [[managedObjectContext executeFetchRequest:fetchRequest error:nil]mutableCopy];

self.images = [[NSMutableArray alloc] init];
[self convertDataToImage];

dispatch_async(dispatch_get_main_queue(), ^{
    [self.collectionView reloadData];
});

这是convertDataToImage方法

- (NSMutableArray *)convertDataToImage {
for (NSDictionary *dictionary in self.photos) {
    NSData *data = dictionary[@"photo"];
    UIImage *image = [[UIImage alloc] initWithData:data];
    CGImageRef cgref = [image CGImage];
    CIImage *cim = [image CIImage];

    if (cim == nil && cgref == NULL) {
        NSLog(@"no underlying data");
    } else {
        [self.images addObject:image];
    }
}
if (self.images == nil && [self.images count] == 0) {
    return self.images;
} else {
    return 0;
}

我调试了所有内容,它们全部保存,获取,全部访问并且工作正常,但如果在编辑模式下添加图像,除非通过新模式添加新图像,否则它将无法显示。我希望我能很好地解释我的问题,并且事先感谢你们所有人。

0 个答案:

没有答案