一尘不染

我怎么可以强制转换为NSManagedObject但不能强制转换为实体的类型?

swift

我在一个新项目中将Swift样板代码用于Core
Data。我的.xcdatamodeld文件有一个定义的单一实体(Task)和一个属性(name)。

我有一个Task.swift看起来像这样的文件:

import CoreData

class Task: NSManagedObject {
    @NSManaged var name: String
}

当我运行它时,它起作用:

var firstTask = NSEntityDescription.insertNewObjectForEntityForName("Task",
    inManagedObjectContext: managedObjectContext) as NSManagedObject

firstTask.setPrimitiveValue("File my TPS reports", forKey: "name")

var error: NSError?

managedObjectContext.save(&error)

我什至可以进入iOS模拟器正在使用的SQLite数据库,并确认已添加该行。

但是,当我运行与上面完全相同的代码,但使用as Task而不是时as NSManagedObject,出现Thread 1: EXC_BREAKPOINT (code=EXC_I386_BPT, subcode=0x0)了与var firstTask…行关联的错误消息,导致崩溃。如果我继续执行,则每次执行线程1时它都会到达EXC_BAD_ACCESS0 misaligned_stack_error_位于线程1的顶部。

为什么这种转换会导致所有这些?


阅读 231

收藏
2020-07-07

共1个答案

一尘不染

确保您的“类名”字段实际上是 Module .Task,其中 Module
是您的应用程序的名称。Swift中的CoreData类具有名称空间。现在,您的对象是作为NSManagedObject而不是Task移出上下文的,因此铸态失败了。

2020-07-07