Le meilleur moyen de sauvegarder et de récupérer des UIColors dans datatables de base

Je peux penser à quelques façons, par exemple en sauvegardant chaque composant de couleur comme un flottant, en sauvegardant un tableau comme transformable. L'logging d'une couleur à partir d'une image de motif peut être légèrement plus compliqué, mais je suppose que vous pouvez save le nom de l'image sous forme de string et l'insert dans le code de création.

Suis-je sur la bonne voie, sinon quel est le meilleur et le plus efficace pour faire cette tâche en général?

Vous pouvez convertir votre UIColor en NSData , puis le stocker:

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

alors vous pouvez le convertir en votre object UIColor :

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

UPD .:

Répondre à votre question dans les commentaires sur le stockage des données, le plus simple est de le stocker dans NSUserDefaults :

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

puis le récupérer:

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

J'ai fait la version de Swift 3 de la réponse d'Oleg avec quelques modifications sur le code.

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

Usage

 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