Лучший способ сохранить и получить 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