为了将UIColor保存为核心数据,您需要分隔红色,蓝色和绿色值。然后,在您的创建代码中,获取RGB值并使用获取的结果创建一个UIColor对象。这比听起来容易,你不必提供NSKeyArchiver/Unarchiver或NSUserDefaults的任何工作。
在您的数据模型中,在您的颜色实体中,创建三个属性:float类型的红色,绿色和蓝色。然后为颜色实体子类NSManagedObject。 (如果你在使用核心数据之前听起来很熟悉)。但是,这不是关于如何使用核心数据的问题,所以我会解决它的。
为了论证的缘故,我们将生成一个随机颜色并将其保存到核心数据(您可以将RGB值设置为您希望的任何颜色)。
首先在您将要使用它的任何类的实现文件中创建三个float类型的属性。
@property (nonatomic) float randomRedColor;
@property (nonatomic) float randomBlueColor;
@property (nonatomic) float randomGreenColor;
设置保存核心数据的方法,至少为每个RGB值使用3个float类型的参数。请记住,该实体属性必须是一个对象,而不是基本类型,因此在为键设置值时,将您的浮点值包含在NSNumber中。
-(void) withColors:(float)redColor withBlue:(float)blueColor withGreen:(float)greenColor{
//set up NSManagedObjectContext/EntityDescription/ManagedObject (core data)
self.randomRedColor = redColor;
self.randomBlueColor = blueColor;
self.randomGreenColor = greenColor;
[newCategory setValue:[NSNumber numberWithFloat:redColor] forKey:@"red"];
[newCategory setValue:[NSNumber numberWithFloat:blueColor] forKey:@"blue"];
[newCategory setValue:[NSNumber numberWithFloat:greenColor] forKey:@"green"];
//save new objects (core data)
无论你打算调用此方法,你将创建三个彩车用随机值,并通过他们在:(我喜欢做这一切的数据源设置,所以不用担心我的sharedInstance。如果你不熟悉Singleton模式,不用担心,我只是简单地调用该方法,并在随机生成的值传递为我们的论点。)
float red = (arc4random()%256/256.0);
float blue = (arc4random()%256/256.0);
float green = (arc4random()%256/256.0);
[[DataSource sharedInstance] withColors:red withBlue:blue withGreen:green];
现在只需进口你的Color NSManagedObject的头文件并在这种情况下创建你的Color NSManagedObject属性,我们将其称为* color:
@property (nonatomic, strong) Color *color
假设有人读这知道如何执行读取请求时,我们现在将使用我们的*红色*的蓝色和绿色*当我们的子类我们的颜色实体已提供的属性。
float red = [self.category.red floatValue];
float green = [self.category.green floatValue];
float blue = [self.category.blue floatValue];
所有剩下的是检索到的值存储在的UIColor对象:
UIColor *randomRGBColor = [[UIColor alloc] initWithRed:red green:green blue:blue alpha:1.0];
现在,你就大功告成了。您已成功存储UIColor对象。我希望这有帮助!
谢谢,@quellish!我猜这肯定是一个相对较新的创新,因为之前的参考文献似乎指向了更严格的措施。 – rattletrap99
不,在那里呆了很长很长的时间。 – quellish
感谢您的帮助,先生(或女士,视情况而定)。完美的作品! – rattletrap99