0

我有一个名为“Color”的实体,它存储了 R、G、B,以及一个根据需要返回饱和度、UIColor 等的子类。我最近写了一些代码,我需要将 Color 实体作为“Color”类,这样我就可以在它上面调用一个方法。

但似乎打破了另一部分。

在存储颜色之前,我使用 Color 类根据 Color 类中的方法确定要存储的颜色。这是我遇到问题的地方。

Color *color = [[Color alloc] initWithColor:[UIColor whiteColor]];
if (color.saturation > 0.2) {
    [self addOrIncrementColor:color];
}

在 if 语句中,调试器显示:

color   Color * 0x1f532740
NSManagedObject NSManagedObject 
red CGFloat 0.392157
green   CGFloat 0.443137
blue    CGFloat 0.203922
count   __NSCFNumber *  0x1f559d00
color   UIDeviceRGBColor *  0x200e8f10
saturation  CGFloat 0.539823

但是,如果我打印 Color 对象的描述,我会得到:

Color: 0x1f532740 (entity: (null); id: (null) ; data: {})

当然,这会将颜色对象传递给带有 null 信息的 addOrIncrement: 方法,即使它是在本地设置的。

知道我怎样才能让它工作吗?

4

1 回答 1

1

NSManagedObject像使用普通对象那样使用 s 看起来不正常(例如使用通常的alloc init. 相反,NSManagedObjects 应该使用NSManagedObjectContext.

话虽这么说,如果您只想要一个NSManagedObject不会保存到 a的临时文件context,那么像往常一样创建它们,但是使用 nil context

NSEntityDescription *entity = [NSEntityDescription entityForName:@"Color" inManagedObjectContext:managedObjectContext];
Color *color = [[Color alloc] initWithEntity:entity insertIntoManagedObjectContext:nil];
if (color.saturation > 0.2) {
    ...
}

查看其他帖子以供参考。

于 2012-09-13T04:58:39.733 回答