如何将NSManagedObject转换为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
属性返回一个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
以便在执行请求时返回DictionaryResultType
,而不是像NSManagedObject
一样将对象从数据库中取出。
但是,您将无法编辑这些字典中的值,并将更改保存在数据库中。 如果你只是需要从你的数据库中读取,那么这不是一个问题。
不优雅,但这应该工作…
var names = Array<String>() for attributeName in order?.entity.attributesByName.keys { names.append(attributeName as! String) }
这是将某种集合转换成另一种集合的问题,即使内部types相同,这也是不平凡的。
编辑:更快的精神
var names = map(order?.entity.attributesByName.keys){return $0 as! String}
- iPhone中的核心数据默认使用哪个持久性存储
- NSManagedObjectContext没有正确保存到SQLite
- 核心date的概念:NSFetchedResultsController与NSManagedObject objectsWithFetchRequest
- Mogenerator和Xcode 4的优点/缺点
- 对CoreData类重新声明无效
- 错误:无法find接受提供参数的“title”的重载
- 挂在NSManagedObjectContext的保存:
- UITableView删除/添加行导致CoreData:严重的应用程序错误,如果在SplitViewController的MasterView中select了另一个对象
- 如果应用程序在10秒内死亡,NSUserDefaults丢失新保存的数据