2010-10-06 181 views
0

我试图在使用核心数据的应用程序中解决的问题是能够在NSManagedObject自定义ivar中保存计算值。我想存储的计算值实际上是一个图像。我不想坚持这些图像;我构建它们并在应用程序的整个生命周期中销毁它们。我沿着线尝试:核心数据问题

@interface RTStaffImage : NSManagedObject { 

UIImage *image; 

} 

// Custom properties 
@property (nonatomic, retain) UIImage *image; 
// Managed object properties 
@property (nonatomic, retain) NSNumber *imageID; 
@property (nonatomic, retain) NSString *imageName; 

和自定义访问器方法:

- (void)setImage (UIImage*)im; 
- (UIImage *)image; 

,并在执行:

@implementation RTStaffImage 

@synthesize image; 
@dynamic imageID; 
@dynamic imageName; 

这无法在运行时有无法识别的选择问题:

-[NSManagedObject setImage:]: unrecognized selector sent to instance 

ab ove的方法是什么苹果(或者,至少据我看到阅读文档)概述了瞬态属性,因此它应该可以工作:-(

任何想法,意见?

回答

0

呀,你有这些倒退:

@synthesize image; 
@dynamic imageID; 
@dynamic imageName; 

你提供setImage和图像的实施,使形象应该是@dynamic,其他你需要的合成方法,所以使用的@synthesize imageID和imageName。

好点,它们都应该是@dynamic,因为你使用CoreData。

第二次尝试:您已将RTStaffImage设置为实体中的类名称,对不对?

第三次尝试:是RTStaffImage.m实际上是正在构建的目标的一部分吗?

+0

编号imageID和imageName必须是@dynamic,因为这些属性的访问器是由Core Data动态创建的。我看到你在说什么图像 - 我会尝试@dynamic ... – 2010-10-07 04:01:19

+0

>>第二次尝试:你已经在实体中设置了RTStaffImage作为类名,对吧? 是的,我有。顺便说一句 - 我试图改变@synthesize图像@动态图像无效 – 2010-10-07 12:14:57

0
- (void)setImage (UIImage*)im; 

您在setImage和(UIImage *)之间缺少一个冒号。这是正确的版本:

- (void)setImage:(UIImage*)im; 

这两种方法的实现在哪里?


-[NSManagedObject setImage:]: unrecognized selector sent to instance 

只是好奇,我读NSManagedObject那里,你确定你创建RTStaffImage存在的实例?

+0

>>你在setImage和(UIImage *)之间缺少冒号。这只是我的错字 - 我没有剪切和粘贴。我有它正确的(或它不会编译) – 2010-10-07 04:01:37

+0

>>只是好奇,我在那里读NSManagedObject,你确定你创建一个RTStaffImage的实例吗?是。这就是Core Data的工作原理。如果你的子类NSManagedObject,在我的情况下RTStaffImage是一个子类,调试输出总是说'NSManagedObject'不是实际的子类类型。不知道为什么... ..可能是因为它没有找到RTStaffImage上的setImage方法,它将它撞上响应链? – 2010-10-07 04:18:04