将UIColor保存到RLMObject子类

时间:2015-12-06 19:15:54

标签: realm

Realm是否支持UIColors?

如何将一个UIColor属性添加到R​​LMObject的子类中,以及这样做的推荐方法是什么?

感谢您的帮助!

4 个答案:

答案 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