如何将NSManagedObject转换为NSDictionary

时间:2015-04-16 06:44:02

标签: ios swift core-data nsdictionary nsmanagedobject

我正在尝试将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.

我在这里做错了什么?

3 个答案:

答案 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}