无法将“NSKnownKeysDictionary1”()类型的值转换为“”()
Posted
技术标签:
【中文标题】无法将“NSKnownKeysDictionary1”()类型的值转换为“”()【英文标题】:Could not cast value of type 'NSKnownKeysDictionary1' () to '' () 【发布时间】:2017-09-20 09:12:08 【问题描述】:我正在尝试将我的 NSManagedObject 转换为 Dictionary,以便我可以将其序列化为 JSON。
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
我已经看过这个问题: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]()
记录+核心数据类:
public class Record: NSManagedObject
记录+核心数据属性:
extension Record
@nonobjc public class func fetchRequest() -> NSFetchRequest<Record>
return NSFetchRequest<Record>(entityName: "Record")
@NSManaged public var name: String?
这是定义records
的地方。
【问题讨论】:
records
在哪里定义以及如何定义? – 对于resultType = .dictionaryResultType
,获取请求返回一个字典数组,该数组与您的返回类型[Record]
不兼容。
请查看我对这个问题的更新。
你想要一个 Record 对象数组还是一个字典数组?
我相信我需要一个字典数组才能将它们序列化为 JSON?我可能错了。
【参考方案1】:
为了从 fetch 请求中获取 dictionaries 数组 你必须做两件事:
设置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]
并将包含一个
具有所获取对象的字典表示形式的数组。
【讨论】:
谢谢您,我的数据现在正在打印为字典。但是它改变了我现在显示数据的方式,因为它不再使用Record
类,而是使用NSDictionary
。让我的数据像以前一样显示的最佳方法是什么?
@Chace:我会使用单独的获取请求。一个(带有 NSFetchedResultsController)在表格视图中显示数据,另一个用于导出数据。
很好的解释。拯救了我的一天,或者我应该说“晚上”。谢谢你:)以上是关于无法将“NSKnownKeysDictionary1”()类型的值转换为“”()的主要内容,如果未能解决你的问题,请参考以下文章
无法将 createdAt 和 updatedAt 保存为日期时间值,也无法将后端保存为前端
C# 无法将类型为“System.Byte[]”的对象强制转换为类型“System.Data.DataTable
无法将类型为“System.Collections.Generic.List`1[EPMS.Domain.SingleItem]”的对象强制转换为类型“EPMS