Realm是否支持UIColors?
如何将一个UIColor属性添加到RLMObject的子类中,以及这样做的推荐方法是什么?
感谢您的帮助!
答案 0 :(得分:2)
Realm不直接支持读写UIColor
个对象。
话虽如此,将UIColor
转换为可以保存到Realm的格式,然后根据需要再将其转换回来应该相对容易。
没有官方推荐的方式,但我建议的方法是将UIColor
转换为十六进制版本,并将其作为字符串保存到Realm对象。
GitHub上有许多用于执行UIColor
到十六进制转换的库,例如:https://github.com/nicklockwood/ColorUtils
答案 1 :(得分:2)
我创建了一个超类,允许任何支持NSCoding的NSObject在领域中保存为Data对象。
class RLMArchiveableObject : Object {
dynamic var data: Data?
var object: Any? {
get {
return (data == nil) ? nil : NSKeyedUnarchiver.unarchiveObject(with: data!)
}
set {
data = (newValue == nil) ? nil : NSKeyedArchiver.archivedData(withRootObject: newValue!)
}
}
override class func ignoredProperties() -> [String] {
return ["object"]
}
}
答案 2 :(得分:2)
您只需要将颜色转换为字符串并将该字符串保存到领域
extension UIColor {
func toString() -> String {
let colorRef = self.cgColor
return CIColor(cgColor: colorRef).stringRepresentation
}
}
答案 3 :(得分:0)
我能够通过向表示UIColor的RGB值的子类RLMObject添加三个浮点值来实现所需的结果。
对于那些有类似问题的人,我在下面提供了我的解决方案。
@interface LFKColor : RLMObject
@property NSString *name;
@property float redColor;
@property float blueColor;
@property float greenColor;
@property (nonatomic, strong) UIColor *color;
@end
@implementation LFKColor
@synthesize color;
+ (NSString *)primaryKey {
return @"name";
}
+ (NSArray *)ignoredProperties {
return @[@"color"];
}
-(void)setColor:(UIColor *)selectedColor {
self->color = selectedColor;
const CGFloat* components = CGColorGetComponents(selectedColor.CGColor);
self.redColor = components[0];
self.greenColor = components[1];
self.blueColor = components[2];
}
-(UIColor *)color {
return [[UIColor alloc] initWithRed:self.redColor green:self.greenColor blue:self.blueColor alpha:1.0];
}
@end