经过一番研究后,我无法找到问题的答案,所以让我解释一下。
用户可以创建一个可以包含文本,音频和图像的对象,但他不需要添加全部三个。稍后,可以编辑它来添加图像。那部分就像一个魅力。现在,我的问题是,我有一个集合视图来显示添加的所有图像,如果图像最初添加到对象,它将正常运行。如果用户编辑添加图像的对象,则只有在创建带图像的新对象时才会显示此新图像。
在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;
}
我调试了所有内容,它们全部保存,获取,全部访问并且工作正常,但如果在编辑模式下添加图像,除非通过新模式添加新图像,否则它将无法显示。我希望我能很好地解释我的问题,并且事先感谢你们所有人。