【问题标题】:"'[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 的变化,要么是我得到代码的教程有误。

【问题讨论】:

    标签: swift core-data swift2


    【解决方案1】:

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

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

    【讨论】:

    • 你应该提供一些解释为什么这样可以修复错误
    • 嘿@Jojodmo,你问我还是他?
    • @DiegoPetrucci 你。仅代码答案对 OP 有帮助,但对未来的访问者帮助不大
    • @Jojodmo 我真的不知道。我的想法是,要么这是 Swift 2.x 与 Swift 1.x 的变化,要么是我得到代码的教程是错误的。
    • @DiegoPetrucci 不要回答我 - 编辑问题并添加它的工作方式或原因,以便未来的访问者可以找到帮助
    猜你喜欢
    • 1970-01-01
    • 2012-07-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-09-15
    • 1970-01-01
    • 2013-03-06
    • 1970-01-01
    相关资源
    最近更新 更多