从 CoreData 获取数据时出现“'[AnyObject]' 不可转换为 '[Dog]?'”错误

Posted

技术标签:

【中文标题】从 CoreData 获取数据时出现“\'[AnyObject]\' 不可转换为 \'[Dog]?\'”错误【英文标题】:"'[AnyObject]' is not convertible to '[Dog]?'" error when fetching data from CoreData从 CoreData 获取数据时出现“'[AnyObject]' 不可转换为 '[Dog]?'”错误 【发布时间】:2015-08-11 14:42:29 【问题描述】:

我在从 Core Data 获取数据时遇到问题。如果我的术语不具体或不准确,我很抱歉,但我是 Core Data 的新手。

我使用的是 Xcode 7 beta 和 Swift 2。设备操作系统设置为 8.4。

行:

let result = try managedContext.executeFetchRequest(dogFetch) as [Dog]?

给我这个错误:"'[AnyObject]' is not convertible to '[Dog]?'".

完整代码在这里:

do 
    let dogEntity = NSEntityDescription.entityForName("Dog", inManagedObjectContext: managedContext)
    let dog = Dog(entity: dogEntity!, insertIntoManagedObjectContext: managedContext)

    let dogName = "Fido"
    let dogFetch = NSFetchRequest(entityName: "Dog")

    dogFetch.predicate = NSPredicate(format: "name == %@", dog)

    let result = try managedContext.executeFetchRequest(dogFetch) as [Dog]?

    if let dogs = result 
        if dogs.count == 0 

            currentDog = Dog(entity: dogEntity!, insertIntoManagedObjectContext: managedContext)
            currentDog.name = dogName

         else 
            currentDog = dogs[0]
        
    
 catch let fetchError as NSError 
    print("Could not fetch \(fetchError)")

我附上了一张图片来展示我的核心数据模型的样子:

Core Data 类是“标准的”,从 Editor > Create NSManagedObjectSubclass 自动创建:

狗+CoreDataProperties.swift:

import Foundation
import CoreData

extension Dog 

    @NSManaged var name: String?
    @NSManaged var walks: NSOrderedSet?


狗.swift:

import Foundation
import CoreData

@objc(Dog)
class Dog: NSManagedObject 

// Insert code here to add functionality to your managed object subclass


Walk+CoreDataProperties.swift 和 Walk.swift 基本相同。

--

编辑:所选答案解决了问题。我的想法是,要么这是 Swift 2.x 与 Swift 1.x 的变化,要么是我得到代码的教程有误。

【问题讨论】:

【参考方案1】:

你应该这样做 managedContext.executeFetchRequest(dogFetch) as? [Dog]

这是因为这里的转换没有保证,所以你应该保护自己免受崩溃(通过使用as?进行转换。上面的语句意味着executeFetchRequest返回值应该转换为[Dog](一个包含Dog的数组实例,顺便说一下,它可以为空),但只有在可能的情况下 - 否则强制转换将失败,您可以在 catch 语句中正确处理它。

【讨论】:

你应该提供一些解释为什么这样可以修复错误 嘿@Jojodmo,你问我还是他? @DiegoPetrucci 你。仅代码答案对 OP 有帮助,但对未来的访问者帮助不大 @Jojodmo 我真的不知道。我的想法是,要么这是 Swift 2.x 与 Swift 1.x 的变化,要么是我得到代码的教程是错误的。 @DiegoPetrucci 不要回答我 - 编辑问题并添加它的工作方式或原因,以便未来的访问者可以找到帮助

以上是关于从 CoreData 获取数据时出现“'[AnyObject]' 不可转换为 '[Dog]?'”错误的主要内容,如果未能解决你的问题,请参考以下文章

Swift:将 CoreData 获取为数组

使用 NSPredicate 从 NSFetchedResultscontroller 更新 NSManagedObject 时出现 CoreData 错误

iOS:更新数据时出现CoreData异常

保存数据时出现问题,将 CoreData 与 SwiftUI 一起使用

对 CoreData 执行添加/更新时出现问题

将 json 文件读入 CoreData 时出现精度错误