我正在尝试将NSManagedObject
转换为NSDictionary
这是我尝试的内容:
var keys:NSArray = order?.entity.attributesByName.keys
var dict:NSDictionary = order?.dictionaryWithValuesForKeys(keys)
但我得到错误:
LazyForwardCollection<MapCollectionView<Dictionary<NSObject,
AnyObject>, NSObject>>? is not convertible to NSArray.
我在这里做错了什么?
答案 0 :(得分:17)
字典的keys
属性返回LazyForwardCollection
,必须将其转换为实数。
另一个问题是order
显然是可选的,所以它需要
要打开的,例如带有可选的绑定。
if let theOrder = order {
let keys = Array(theOrder.entity.attributesByName.keys)
let dict = theOrder.dictionaryWithValuesForKeys(keys)
} else {
// order is nil
}
答案 1 :(得分:0)
您可以将NSManagedObject
上的resultType
设置为NSFetchRequest
,而不是将对象设置为DictionaryResultType
,以便在您{0}}时返回字典执行请求。
但是,您将无法编辑这些词典中的值并将更改保存在数据库中。如果您只需要从数据库中读取,那么这不是问题。
答案 2 :(得分:0)
不优雅,但这应该有用......
var names = Array<String>()
for attributeName in order?.entity.attributesByName.keys
{
names.append(attributeName as! String)
}
这是将某种类型的集合转换为另一种集合的问题,即使内部类型相同也是如此。
编辑: 更快一点的精神
var names = map(order?.entity.attributesByName.keys){return $0 as! String}