【问题标题】:Strange Down-casted Array element failed to match the target type issue in Swift 3Strange Down-casted Array 元素无法匹配 Swift 3 中的目标类型问题
【发布时间】:2016-12-14 23:08:11
【问题描述】:

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

我该如何解决这个问题?

【问题讨论】:

  • 显示更多代码...
  • @JérômeTeisseire 你想看什么?哪个部分?
  • 看来你有一个NSManagedObject 而不是ItemItem 继承自 NSManagedObject,因此您可以将 Item 放入 [NSManagedObject] 但您不能将 NSManagedObject 放入 [Item]
  • @Paulw11 那么,我该如何解决呢? =/
  • 你能显示allWithPredicate的代码吗?似乎它正在返回一个[NSManagedObject]

标签: ios arrays swift core-data swift3


【解决方案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) 中输入了错误的实体名称

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-09-27
    • 1970-01-01
    • 2014-10-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-11-11
    相关资源
    最近更新 更多