如何存储对象';MySQL数据库中的颜色数据


How can I store an object's color data in MySQL database?

在iOS Swift应用程序中,用户可以通过添加其他视图和/或更改视图的背景色来"自定义屏幕"。当他们点击保存时,我想将每个对象的属性以及父视图的背景颜色存储到MySQL数据库中,以便以后检索和重建视图。所有数据更新都是通过PHPREST服务完成的。

我目前正在处理背景色的颜色数据。如果我打印()颜色,我会得到类似"UIDeviceRGBColorSpace 0.866667 0.92549 1 1"的东西。我还可以用以下方法将其转换为NSData:

let data = NSKeyedArchiver.archivedDataWithRootObject(self.view.backgroundColor!)

然而,无论在哪种情况下,我都不知道如何通过PHPREST服务将数据保存到数据库中,甚至不知道我将使用什么数据类型。

我是不是走错了路?我应该做一些事情,比如获取RGB值和Alpha,并将它们保存到数据库中的4个属性中,还是获取十六进制值并存储它?也许,还有一种不同的方法会更直接?

如果你想保留NSColor/UIColor实例中编码的所有信息(其原始颜色空间中的原始精确值,可能不是RGB、校准等),并且需要将其编码为字符串(而不是二进制blob,MySQL也可以这样做),你可以使用base64编码-以base64编码的形式向服务器发送颜色,并在检索时对其进行解码。

let color = NSColor.blackColor()
let data = NSKeyedArchiver.archivedDataWithRootObject(color)
// this can go in your database
let base64EncodedColorString = data.base64EncodedStringWithOptions([])
let decodedColorData = NSData(base64EncodedString: base64EncodedColorString, options: [])
NSKeyedUnarchiver.unarchiveObjectWithData(decodedColorData!)

这有一个明显的缺点,即你的服务器不知道数据编码什么,所以如果你关心这一点,那么获取颜色的RGB分量并将其存储为字符串可能是更好的选择。