2013-06-21 2 views
13

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

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

+1

NSKeyedArchiver это вещь – lukaswelte

ответ

16

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

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

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

UPD .:

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

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

, а затем retrive его:

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

Спасибо! И вы сохранили бы это на диске непосредственно в docs dir или сохранили бы его как двоичные данные или другие в Core Data? Я предполагаю, что это возможно, просто интересно, о чем вы думаете. – Mrwolfy

+0

Ну, самый простой способ - сохранить его в NSUserDefaults, но возможны и другие способы – Oleg

3

Я сделал версию 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