Core data Swift数组不能向下转换为派生数组

Core data Swift数组不能向下转换为派生数组,core-data,swift,xcode6,Core Data,Swift,Xcode6,我在Swift中使用核心数据,在存储从提取请求返回的数组时遇到问题。我的数据模型中有两个实体:任务和家庭作业。作业的父实体是任务。我自动生成了两个实体的类: 斯威夫特 import Foundation import CoreData class Task: NSManagedObject { @NSManaged var name: String @NSManaged var due: NSDate @NSManaged var subject: Subject

我在Swift中使用核心数据,在存储从提取请求返回的数组时遇到问题。我的数据模型中有两个实体:任务和家庭作业。作业的父实体是任务。我自动生成了两个实体的类:

斯威夫特

import Foundation
import CoreData

class Task: NSManagedObject {

    @NSManaged var name: String
    @NSManaged var due: NSDate
    @NSManaged var subject: Subject

}
斯威夫特先生

import Foundation
import CoreData

class Homework: Task {
}
在我的视图控制器中,在视图确实加载时,我有以下代码

var error: NSError? = nil
let fetchRequest = NSFetchRequest()
let entity = NSEntityDescription.entityForName("Task", inManagedObjectContext: managedObjectContext)
fetchRequest.entity = entity
tasks = managedObjectContext.executeFetchRequest(fetchRequest, error: &error) as [Task]
在前面的视图控制器中,我初始化了任务:

var tasks : [Task] = []
但是,当我运行应用程序时,在我将数组分配给任务的行中出现以下运行时错误:
致命错误:数组不能向下转换为派生的数组


如果将赋值行替换为[NSManagedObject],则不会发生错误,但需要将其保存为任务数组,以便能够使用生成的自定义类。我做错了什么?

您必须在模型编辑器中将模块或应用程序名称添加到类名中:

MyApp.Task
这必须在生成类文件后完成,否则该部分将失败。我认为这是当前beta中的一个bug,并提出了这样的错误。
我之前的回答是使用@objc decorator,它也可以工作,但是上面的解决方案记录在swift/cocoa参考中

根据Beta 4的XCode发行说明,降级现在应该可以工作了:

类类型的对象(如NSObject或NSArray)现在可以向下转换为桥接Swift 类型

(不过还没试过)

但是,您可以在需要时强制转换任务数组中的对象:

tasks = managedObjectContext.executeFetchRequest(fetchRequest, error: &error)  // array of NSManagedObjects

for obj in tasks {
    let task = obj as Task
    ...
}

根据,正确的解决方案是在entities类中包含模块/应用程序名称(然后它在没有
@objc(Task)
的情况下工作,至少在我的测试中是这样)。当然,当自动创建托管对象子类时,Xcode应该与之匹配。@MartinR哦,很有趣。这是文档中的新内容还是我一直都没有看到?如果它能从NSManagedObject类参考中指向它,那就太好了……我不知道,但是Ben对重复问题的回答是从6月11日开始的,所以我假设它已经被记录了一段时间。好的,谢谢。我已经将我的错误报告更新为文档修复,并将模块名添加到生成器的类中。比较中的“实现核心数据管理对象子类”。