Strange Down-casted Array元素无法匹配Swift 3中的目标类型问题

时间:2016-12-14 23:08:11

标签: ios arrays swift core-data swift3

当我尝试将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上没有?

我该如何解决?

1 个答案:

答案 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)中放入了错误的实体名称