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

Posted

技术标签:

【中文标题】Strange Down-casted Array 元素无法匹配 Swift 3 中的目标类型问题【英文标题】:Strange Down-casted Array element failed to match the target type issue in 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] 【参考方案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) 中输入了错误的实体名称

【讨论】:

以上是关于Strange Down-casted Array 元素无法匹配 Swift 3 中的目标类型问题的主要内容,如果未能解决你的问题,请参考以下文章

题解 CF1539F Strange Array

Codeforces1539 F. Strange Array(思维,线段树)

CodeForces - 1539F Strange Array(线段树区间合并)

Codeforces Round #727 (Div. 2) F. Strange Array(思维,线段树子段和)

poj 2891 Strange Way to Express Integers 2012-09-05

UVA10519 Really Strange大数+递推