2017-09-20 97 views
2

我試圖我NSManagedObject轉換成字典這樣我就可以使用序列化的JSON無法投類型的值「NSKnownKeysDictionary1」()爲「」()

func fetchRecord() -> [Record] { 

     let fetchRequest = NSFetchRequest<Record>(entityName:"Record") 
     let context = PersistenceService.context 

     fetchRequest.resultType = .dictionaryResultType 

     do { 
      records = try context.fetch(Record.fetchRequest()) 

     } catch { 
      print("Error fetching data from CoreData") 
     } 
     print(records) 
     return records 
} 

我在這個問題已loked:How to convert NSManagedObject to NSDictionary但他們的方法似乎我的非常不同。我也嘗試了這個問題中提供的方法:CoreData object to JSON in Swift 3。但是我收到此錯誤

無法投類型的值「NSKnownKeysDictionary1」(0x108fbcaf8)爲「iOSTest01.Record」(0x1081cd690)$

,我似乎無法找到解決辦法。

錯誤已在此處提及:Core Data: Could not cast value of type 'MyType_MyType_2' to MyType但沒有任何方法正在解決我的問題。任何人都可以爲我提供Swift解決方案嗎?

更新

爲了幫助在註釋下我已經添加了以下內容:

var record: Record! 
var records = [Record]() 

記錄+ CoreDataClass:

public class Record: NSManagedObject { 

} 

記錄+ CoreDataProperties:

extension Record { 

    @nonobjc public class func fetchRequest() -> NSFetchRequest<Record> { 
     return NSFetchRequest<Record>(entityName: "Record") 
    } 

    @NSManaged public var name: String? 

} 

這就是records的定義。

+0

「記錄」的定義在哪裏? - 通過'resultType = .dictionaryResultType',獲取請求返回一個* dictionaries數組,*與您的返回類型'[Record]'不兼容。 –

+0

請參閱我的問題更新。 – Chace

+0

你想要一個Record對象或一個字典數組的數組嗎? –

回答

3

爲了獲得詞典從讀取請求 數組,你必須做兩件事情:

  • 設置fetchRequest.resultType = .dictionaryResultType(因爲你已經做了),和
  • 聲明讀取請求爲NSFetchRequest<NSDictionary>而不是NSFetchRequest<YourEntity>

實施例:

let fetchRequest = NSFetchRequest<NSDictionary>(entityName:"Event") 
fetchRequest.resultType = .dictionaryResultType 

// Optionally, to get only specific properties: 
fetchRequest.propertiesToFetch = [ "prop1", "prop2" ] 

do { 
    let records = try context.fetch(fetchRequest) 
    print(records) 
} catch { 
    print("Core Data fetch failed:", error.localizedDescription) 
} 

現在records具有類型[NSDictionary]和將包含一個 陣列與所述取出對象的詞典表示。

+0

謝謝你,我的數據現在正在以字典的形式打印出來。但是它改變了我現在顯示數據的方式,因爲它不再使用Record類而是使用'NSDictionary'。什麼是最好的方法讓我的數據像以前一樣顯示? – Chace

+1

@Chace:我會使用單獨的提取請求。一個(使用NSFetchedResultsController)在表視圖中顯示數據,另一個用於導出數據。 –

相關問題