当我尝试将NSManagedObjects添加到数组中时,我收到此错误:
Down-casted Array element failed to match the target type
我有这个对象:<NSManagedObject: 0x60800009c390>
并希望将其放入此数组[Item]
其中
open class Item: NSManagedObject { ... }
并尝试通过以下方式执行此操作:
if let items = Item.withPredicate(predicate) {
return items as! [Item]
}
在这里我得到了这个错误。为什么它在Swift 3上发生而在Swift 2上没有?
我该如何解决?
答案 0 :(得分:1)
不确定如何使用这样的谓词。 要获取具有谓词的实体的数据,请使用NSFetchRequest:
let context = (UIApplication.shared.delegate as! AppDelegate).persistentContainer.viewContext
let fetchrequest = NSFetchRequest<NSManagedObject>(entityName: "Item")
let newentity = NSEntityDescription.entity(forEntityName: "Item", in: context)
fetchrequest.entity = newentity
fetchrequest.predicate = NSPredicate(format: "sirname == %@", "Jones")
fetchrequest.returnsObjectsAsFaults = false
do {
let results = try context.fetch(fetchrequest) as! [Item]
for result in results {
print("result sirname \n \(result.sirname)")
}
} catch let error as NSError {
print("error = \(error)")
}
您收到此错误是因为您可能在NSEntityDescription.entity(forEntityName:“Item”,in:context)中放入了错误的实体名称