如何将 NSManagedObject 转换为 NSDictionary
How to convert NSManagedObject to NSDictionary
我正在尝试将 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.
我做错了什么?
字典的keys
属性 returns a LazyForwardCollection
必须转换为真正的数组。
另一个问题是 order
显然是一个可选的,所以它需要
被解开,例如带有可选绑定。
if let theOrder = order {
let keys = Array(theOrder.entity.attributesByName.keys)
let dict = theOrder.dictionaryWithValuesForKeys(keys)
} else {
// order is nil
}
您可以将 NSFetchRequest
上的 resultType
设置为 DictionaryResultType
以返回字典,而不是将对象作为 NSManagedObject
s 从数据库中取出当你执行请求时。
但是,您将无法编辑这些词典中的值并将更改保存到您的数据库中。如果您只需要从数据库中读取数据,那不是问题。
不够优雅,但应该可以...
var names = Array<String>()
for attributeName in order?.entity.attributesByName.keys
{
names.append(attributeName as! String)
}
这是一个将某种集合转换为另一种集合的问题,即使内部类型相同,这个问题也绝非易事。
编辑:
多一点 swift 精神
var names = map(order?.entity.attributesByName.keys){return [=11=] as! String}
我正在尝试将 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.
我做错了什么?
字典的keys
属性 returns a LazyForwardCollection
必须转换为真正的数组。
另一个问题是 order
显然是一个可选的,所以它需要
被解开,例如带有可选绑定。
if let theOrder = order {
let keys = Array(theOrder.entity.attributesByName.keys)
let dict = theOrder.dictionaryWithValuesForKeys(keys)
} else {
// order is nil
}
您可以将 NSFetchRequest
上的 resultType
设置为 DictionaryResultType
以返回字典,而不是将对象作为 NSManagedObject
s 从数据库中取出当你执行请求时。
但是,您将无法编辑这些词典中的值并将更改保存到您的数据库中。如果您只需要从数据库中读取数据,那不是问题。
不够优雅,但应该可以...
var names = Array<String>()
for attributeName in order?.entity.attributesByName.keys
{
names.append(attributeName as! String)
}
这是一个将某种集合转换为另一种集合的问题,即使内部类型相同,这个问题也绝非易事。
编辑: 多一点 swift 精神
var names = map(order?.entity.attributesByName.keys){return [=11=] as! String}