[英]Core Data and Transformable To Retrieve Image
我正在尝试使用Transformable将图像存储在核心数据中。 以我的方式看,我已经能够将图像保存在核心数据中,但是我遇到的问题是对其进行检索。 到目前为止,这是我所做的
// NSManagedObject的自定义子类
#import <Foundation/Foundation.h>
#import <CoreData/CoreData.h>
#import "ImageConverter.h"
@interface Image : NSManagedObject
@property (nonatomic, retain) id storedImage;
@end
#import "Image.h"
@implementation Image
@dynamic storedImage;
@end
//NSTransformable Subclass
#import <Foundation/Foundation.h>
@interface ImageConverter : NSValueTransformer
@end
#import "ImageConverter.h"
@implementation ImageConverter
+ (Class)transformedValueClass
{
return [NSData class];
}
+ (BOOL)allowsReverseTransformation
{
return YES;
}
- (id)transformedValue:(id)value
{
if (value == nil)
return nil;
// I pass in raw data when generating the image, save that directly to the database
if ([value isKindOfClass:[NSData class]])
return value;
return UIImagePNGRepresentation((UIImage *)value);
}
- (id)reverseTransformedValue:(id)value
{
return [UIImage imageWithData:(NSData *)value];
}
@end
// ViewController类,将图像保存到核心数据中,然后单击按钮重新取回图像
#import <UIKit/UIKit.h>
#import "Image.h"
@interface ViewController : UIViewController
@property (weak, nonatomic) IBOutlet UIImageView *imageView;
@end
@interface ViewController()
@结束
@implementation ViewController
- (void)viewDidLoad {
[super viewDidLoad];
// Do any additional setup after loading the view, typically from a nib.
NSManagedObjectContext *context = [(AppDelegate *)[[UIApplication sharedApplication] delegate] managedObjectContext];
Image *event = [NSEntityDescription insertNewObjectForEntityForName: @"Image" inManagedObjectContext:context];
// self.imageView.image = [UIImage imageNamed:@"Bus.png"];
event.storedImage = [UIImage imageNamed:@"Bus.png"];
NSError *error = nil;
if (![context save:&error]) {
NSLog(@"Unresolved error %@, %@", error, [error userInfo]);
abort();
}
}
- (void)didReceiveMemoryWarning {
[super didReceiveMemoryWarning];
// Dispose of any resources that can be recreated.
}
- (IBAction)button:(id)sender {
NSFetchRequest *fetchRequest = [[NSFetchRequest alloc]init];
// NSEntityDescription *entity= [NSEntityDescription entityForName:@“Event" inManagedObjectContext : context];
//
//
NSManagedObjectContext *context = [(AppDelegate *)[[UIApplication sharedApplication] delegate] managedObjectContext];
NSEntityDescription *entity = [NSEntityDescription entityForName:@"Image" inManagedObjectContext:context];
[fetchRequest setEntity:entity];
NSError *error ;
NSArray *fetchResults =
[context executeFetchRequest : fetchRequest error : &error];
for (Image *objects in fetchResults){
if(objects.storedImage != nil) {
NSLog(@"%@",objects.storedImage);
}
self.imageView.image = objects.storedImage
}
}
@end
我希望看到检索到的图像为
self.imageView.image = objects.storedImage.
但是到目前为止,我还无法检索它。 当我NSLog ImageCoreData [3253:108752] UIImage:0x7fbec1560f70时,检索到{0,0},但未在UIImageView上设置任何图像。
关于此的任何帮助将是巨大的。 我也对将视频存储在核心数据中感到困惑。 请提出正确的处理方法。
这是因为您正在使用imageNamed:
创建图像。 由于核心数据(或可能是带密钥的存档)中存在明显的错误,因此以这种方式创建的图像无法保存到核心数据可转换属性中。 没有错误发生,但是以后无法检索图像。 ( rdar://20717042
对于可能感兴趣的任何人)。
如果您以其他方式创建图像,则它应该可以工作。 例如,如果您使用imageWithContentsOfFile:
那就可以了。 但是您不能在此处使用imageNamed:
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.