我需要在UIColor
中存储NSUserDefaults
,我建议使用Array
存储红色,绿色和蓝色的颜色值。我已经实现了这个,它以前在Xcode 6 beta 4中工作,但是现在我在beta 5中尝试它,从Array
检索的值都是0(因此颜色总是黑色)。我确认Array
已创建并存储到NSUserDefaults
中的确包含正确的值(0到255之间的任何Int
)。我无法弄清楚这里的问题是什么。
//Store in user defaults
var red: CGFloat = 0.0, green: CGFloat = 0.0, blue: CGFloat = 0.0
selectColor?.getRed(&red, green: &green, blue: &blue, alpha: nil) //selectedColor is an optional UIColor
let redInt = Int(red * 255.0), greenInt = Int(green * 255.0), blueInt = Int(blue * 255.0)
let colorArray = [redInt, greenInt, blueInt]
//debugger shows: colorArray = ([Int]) 3 values: 255, 192, 3
NSUserDefaults.standardUserDefaults().setObject(colorArray, forKey: "textColor")
NSUserDefaults.standardUserDefaults().synchronize()
//Retrieve from user defaults later
let colorArray = NSUserDefaults.standardUserDefaults().arrayForKey("textColor")
//debugger shows: colorArray = [AnyObject]! Some
println(colorArray[0]) //prints 0
println(colorArray[1]) //prints 0
println(colorArray[2]) //prints 0
我尝试将colorArray显式设置为[Int]
,但是结果是相同的 - 打印0.在这种情况下,调试器会显示colorArray = ([Int]) 3 values: 0, 0, 0
而不是[AnyObject]! Some
。这是我应该向Apple报告的错误,还是我的代码中有错误?
答案 0 :(得分:0)
这可以按预期工作:
let defaults = NSUserDefaults.standardUserDefaults()
defaults.setObject([1,2,3], forKey: "test")
let x = defaults.objectForKey("test") as [Int]
// [1,2,3]
有趣的是,当我不进行演员表时,结果是
let x = defaults.objectForKey("test")
// [__NSCFNumber, __NSCFNumber, __NSCFNumber]
这显然意味着swift无法知道将返回什么类型的数组,因此演员似乎会处理这种模糊性。
注意:arrayForKey()
的工作原理相同。
答案 1 :(得分:0)
您可以通过简单地将颜色存储为字符串来避免整个恶化。
查看许多颜色实用程序中的一个,它允许您非常方便地将UIColor
转换为十六进制或其他字符串。一个好的例如是https://github.com/Namvt/MVColor。