簡體   English   中英

如何將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屬性返回一個必須轉換為實數的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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM