rat*_*p99 14 core-data uicolor ios
我想将一个UIColor对象作为属性存储在Core Data实体上,然后检索它并以与我在该实体上执行其他属性相同的方式使用它.
在我的研究中,虽然文献看起来很稀疏,但我发现这篇文章说该属性应该被指定为"可转换",并且数据应该在使用NSKeyedArchiver和出现时手动转换NSKeyedUnarchiver.
但后来,我找到了一篇更新的帖子说,所有必要的是将UIColor保存为CD中的Transformable属性,生成一个Managed Object子类,并像其他属性一样使用.
在苹果文档本身进入一些细节上的存储和检索NSColor上的对象,而不是(我能找到)UIColor.但是,它听起来像归档/取消归档在CD中自动处理.也许.我被这条线弄糊涂了:
如果您在Xcode中使用模型编辑器,请在属性的"类型"弹出窗口中选择"可变换",然后在"值变换器名称"文本字段中键入名称.
我假设他们正在谈论属性的名称,但我不确定,特别是因为它警告明确指定变换器可能引起的问题:
要点:虽然默认转换器是NSKeyedUnarchiveFromDataTransformerName指定的转换器,但实际上反向使用此转换器.如果明确指定默认转换器,Core Data将"以错误的方向"使用它.
我已经达到了这样的程度:我有一个名为"color"的新的可转换属性(没有命名变换器)并且生成了一个包含新"color"属性(类型id)的新子类文件.
我只是简单地困惑.有人可以给我一些关于如何从这里开始的明确指导吗?
如果重要的话,我正在使用MagicalRecord与Core Data进行交互.
非常感谢您的帮助!
que*_*ish 32
您的属性应为Transformable类型.默认值转换器(NSKeyedUnarchiveFromDataTransformerName)可以转换符合NSCoding的任何对象.

你不必做任何其他事情.请记住,您无法将可转换属性与谓词匹配或按谓词排序.它们几乎只是存储 - 值变换器将对象值转换为NSData,这是在商店中持久存储的内容.当属性故障触发时,Core Data使用另一个方向的转换器从NSData转到您的对象类型.
另一种选择,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)
}
}
Run Code Online (Sandbox Code Playgroud)
用法
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
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
8303 次 |
| 最近记录: |