gpt4 book ai didi

swift - "' [AnyObject] ' is not convertible to ' [狗]?从CoreData取数据时'"错误

转载 作者:可可西里 更新时间:2023-11-01 00:52:36 25 4
gpt4 key购买 nike

我在从 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 模型的样子:

enter image description here

核心数据类是“标准”的,从编辑器自动创建 > 创建 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 的变化,要么是我从中获取代码的教程有误。

最佳答案

你应该做的managedContext.executeFetchRequest(dogFetch) 作为? [狗]

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

关于swift - "' [AnyObject] ' is not convertible to ' [狗]?从CoreData取数据时'"错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31944913/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com