2010-10-12 43 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