[英]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
屬性返回一個必須轉換為實數的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)
}
這是將某種集合轉換為另一種集合的問題,即使內部類型相同也是如此。
編輯:更快一點的精神
var names = map(order?.entity.attributesByName.keys){return $0 as! String}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.