Лучший способ сохранить и получить UIColors для основных данных

Я могу придумать несколько способов, например, сохранить каждый цветовой компонент как float, сохранив массив как трансформируемый. Сохранение цвета с рисунка изображения может быть несколько более сложным, но я думаю, вы могли бы сохранить имя изображения в виде строки и вставить его в код создания.

Я нахожусь на правильном пути, а что самое лучшее и наиболее эффективное для выполнения этой задачи в целом?

Ответ 1

Вы можете преобразовать ваш UIColor в NSData, а затем сохранить его:

NSData *theData = [NSKeyedArchiver archivedDataWithRootObject:[UIColor blackColor]];

то вы можете преобразовать его обратно в объект UIColor:

UIColor *theColor = (UIColor *)[NSKeyedUnarchiver unarchiveObjectWithData:theData];

UPD:.

Отвечая на ваш вопрос в комментариях о хранении данных, самый простой способ - сохранить его в NSUserDefaults:

NSData *theData = [NSKeyedArchiver archivedDataWithRootObject:[UIColor blackColor]];
[[NSUserDefaults standardUserDefaults] setObject:theData forKey:@"myColor"];

а затем извлеките его:

NSData *theData = [[NSUserDefaults standardUserDefaults] objectForKey:@"myColor"];
UIColor *theColor = (UIColor *)[NSKeyedUnarchiver unarchiveObjectWithData:theData];

Ответ 2

Я сделал Swift 3 версии Олега ответом с некоторыми изменениями в коде.

extension UIColor {
    class func color(withData data:Data) -> UIColor {
         return NSKeyedUnarchiver.unarchiveObject(with: data) as! UIColor
    }

    func encode() -> Data {
         return NSKeyedArchiver.archivedData(withRootObject: self)
    }
}

Использование

var myColor = UIColor.green
// Encoding the color to data
let myColorData = myColor.encode() // This can be saved into coredata/UserDefaulrs
let newColor = UIColor.color(withData: myColorData) // Converting back to UIColor from Data