gpt4 book ai didi

ios - Swift 3 - NSFetchRequest 不同的结果

转载 作者:IT王子 更新时间:2023-10-29 05:41:37 26 4
gpt4 key购买 nike

感谢任何帮助。

Xcode 自动更新到 8...我的目标是 IOS 9.3

所有的代码都转换了,但现在有一件事坏了,我在类似的问题中尝试了各种建议!我以前的提取请求现在中断了。

我的目标是获得一个不同的列表。应用崩溃在线:

let results = try context.fetch(fetchRequest) 

控制台中的错误描述为:

Could not cast value of type 'NSKnownKeysDictionary1' (0x10fd29328) to 'MyApp.BodyType' (0x10eebc820).

这是函数

func getBodyTypes() {
let context = ad.managedObjectContext
let fetchRequest = NSFetchRequest<BodyType>(entityName: "BodyType")
fetchRequest.propertiesToFetch = ["name"]
fetchRequest.returnsDistinctResults = true
fetchRequest.resultType = NSFetchRequestResultType.dictionaryResultType

do {
let results = try context.fetch(fetchRequest)

for r in results {
bodyTypes.append(r.value(forKey: "name") as! String)
}
} catch let err as NSError {
print(err.debugDescription)
}
}

如果下面的行被隐藏,它不会中断,但是我没有得到我想要的!

fetchRequest.resultType = NSFetchRequestResultType.dictionaryResultType 

我知道我可以使用所有结果 (4300) 并循环遍历它们作为创可贴修复,但这感觉不是修复此问题的正确方法,尤其是因为它以前有效!

最佳答案

诀窍是让泛型更通用——而不是 <BodyType>在您的获取请求中,使用 <NSFetchRequestResult> :

let fetchRequest = NSFetchRequest<NSFetchRequestResult>(entityName: "BodyType")

这个获取请求的结果是[Any] ,因此您需要在使用前转换为适当的字典类型。例如:

func getBodyTypes() {
let context = ad.managedObjectContext
// 1) use the more general type, NSFetchRequestResult, here:
let fetchRequest = NSFetchRequest<NSFetchRequestResult>(entityName: "BodyType")
fetchRequest.propertiesToFetch = ["name"]
fetchRequest.returnsDistinctResults = true
fetchRequest.resultType = NSFetchRequestResultType.dictionaryResultType

do {
let results = try context.fetch(fetchRequest)

// 2) cast the results to the expected dictionary type:
let resultsDict = results as! [[String: String]]

for r in resultsDict {
bodyTypes.append(r["name"])
}

} catch let err as NSError {
print(err.debugDescription)
}
}

备注:NSFetchRequestResult是一个协议(protocol),被四种类型采用:
- NSDictionary ,
- NSManagedObject ,
- NSManagedObjectID , 和
- NSNumber

通常,我们将它与 NSManagedObject 一起使用,比如你的 BodyType .但是,在这种情况下,由于以下语句,您将获得字典类型:

fetchRequest.resultType = NSFetchRequestResultType.dictionaryResultType

关于ios - Swift 3 - NSFetchRequest 不同的结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40191598/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com