从 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]?'”错误的主要内容,如果未能解决你的问题,请参考以下文章
使用 NSPredicate 从 NSFetchedResultscontroller 更新 NSManagedObject 时出现 CoreData 错误