Основные данные и преобразование для получения изображения
Я пытаюсь сохранить изображение в основных данных, используя 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
импортировать "ViewController.h"
импорт "AppDelegate.h"
@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 не установлено изображение.
Любая помощь по этому поводу будет отличной. Я также запутался в хранении видео в основных данных. Пожалуйста, предложите правильный способ приблизиться к нему.
1 ответ
Это потому, что вы используете imageNamed:
создать образ. Из-за явной ошибки в Базовых данных (или, возможно, в архивах с ключами) изображения, созданные таким образом, не могут быть сохранены в трансформируемых атрибутах Базовых данных. Ошибки не возникают, но вы не можете получить изображение позже. (rdar://20717042
для тех, кто может быть заинтересован).
Если вы создаете изображение любым другим способом, то оно должно работать. Например, если вы используете imageWithContentsOfFile:
, вам будет хорошо. Но вы не можете использовать imageNamed:
Вот.