2010-10-12 45 views
1

我有一个问题,当在我尝试访问一个核心数据模型的图像特性无法识别的选择发送到实例变形[NSConcreteData规模]:访问图像属性

#import <UIKit/UIKit.h> 


@interface ImageToDataTransformer : NSValueTransformer { 

} 

@end 

实施

#import "ImageToDataTransformer.h" 

@implementation ImageToDataTransformer 


+ (BOOL)allowsReverseTransformation { 
    return YES; 
} 

+ (Class)transformedValueClass { 
    return [NSData class]; 
} 


- (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 

当我设置似乎工作图像细腻,但WH恩我尝试使用它的一个视图中,使用此代码:

- (void)viewDidLoad { 
    [super viewDidLoad];  

    self.title = cocktail.name; //works 

    self.descriptionView.text = cocktail.desc; //works 

    pictureView.image = cocktail.image; //crash 
} 

我得到这个错误:

2010-10-12 17:22:25.409 PrimosBar[2399:207] *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[NSConcreteData scale]: unrecognized selector sent to instance 0xc027e00' 

而且我不知道如何解决:(

你能帮我?

谢谢:)

回答

3

如果我读NSConcreteData我想你是不是在保存的UIImage您ManagedObject而是一个“纯粹”的图像,即JPG,PNG等

确保你出你的纯数据的创建UIImage的第一。也许你想发布代码将映像分配给托管对象的代码。

+0

mhm,我用这段代码保存它[cocktail setImage:[NSData dataWithContentsOfURL:[NSURL URLWithString:@“http://www.objectgraph.com/images/og_logo.png”]]];我会尝试使用UIImage – patrick 2010-10-12 15:53:45

+0

你会发现,你并没有保存UIImage。 – 2010-10-12 15:55:09

+0

作品!非常感谢:D – patrick 2010-10-12 15:55:52

2

对我来说,它看起来像你没有在时间,但别的东西,点有一个UIImage的存在。这可能是因为你的cocktail.image已经发布了。 (但是,我从来没有使用Core Data到目前为止,所以我可能完全关闭:-)(顺便说一下,你确定你在那里有什么实际上是UIImage?)。

+0

它似乎是一个NSConcreteData对象,但我不知道为什么,代码似乎是正确的:( – patrick 2010-10-12 15:40:43

+2

嗯,NSConcreteData是所有目的,NSData。所以它可能是你错过了步骤UIImage是从数据库中的NSData创建的,我会尝试在那里调试,其中UIImage应该是从NSData创建的。 – 2010-10-12 15:47:11

+0

它应该在这个方法中:reverseTransformedValue,对吧?(再次,从未使用Core数据),如果是的话,那么你可以在那里创建一个中间UIImage,并最终将它保存到磁盘(或者发送一条消息给这个中间的UIImage,以确保它成功创建)。 – 2010-10-12 15:49:38