Wil*_*itt 35 core-data ios swift
我正在一个新项目中使用Swift样板代码来处理Core Data.我的.xcdatamodeld文件有一个实体defined(Task),有一个属性(name).
我有一个Task.swift看起来像这样的文件:
import CoreData
class Task: NSManagedObject {
@NSManaged var name: String
}
Run Code Online (Sandbox Code Playgroud)
当我运行它时,它的工作原理:
var firstTask = NSEntityDescription.insertNewObjectForEntityForName("Task",
inManagedObjectContext: managedObjectContext) as NSManagedObject
firstTask.setPrimitiveValue("File my TPS reports", forKey: "name")
var error: NSError?
managedObjectContext.save(&error)
Run Code Online (Sandbox Code Playgroud)
我甚至可以进入iOS模拟器使用的SQLite数据库,并确认已添加该行.
但是,当我运行与上面完全相同的代码但是,as Task而不是as NSManagedObject,我得到一个崩溃与错误消息Thread 1: EXC_BREAKPOINT (code=EXC_I386_BPT, subcode=0x0),与var firstTask...线相关联.如果我继续执行,我得到EXC_BAD_ACCESS和0 misaligned_stack_error_在每一次我提前就螺纹1的顶部.
为什么这个演员会导致这一切?
Ben*_*ieb 46
确保您的类名称字段实际上是Module .Task,其中Module是您的应用程序的名称.Swift中的CoreData类是命名空间.现在,您的对象被作为NSManagedObject从上下文中拉出,而不是作为任务,因此as-cast失败.
pol*_*war 28
如果您尝试了以上所有建议而非他们为我工作,这甚至会感到沮丧!!
所以这对我有用.
1-选择您的xcdatamodeld文件
2-如果您看到"型号:当前产品模块",请确保所有实体在"数据模型检查器"中都没有模块.明确它,使其看起来像附加图像.
3-删除您的应用以清除核心数据
4-如果仍然无法正常工作,请删除您的实体并重新生成它们.
Owe*_*hao 12
您需要修改Task.swift文件.添加@objc(任务),如下所示
import CoreData
@objc(Task)
class Task: NSManagedObject {
@NSManaged var name: String
}
Run Code Online (Sandbox Code Playgroud)
如果您的项目不包含任何objective-c代码,我认为这是一个错误.但是,您需要添加该行,直到此修复为止.
我是从这里学到的.
我想只更改.xcdatamodel中的类字段不再起作用,因为我仍然有以下异常:致命错误:使用未实现的初始化程序'init(entity:insertIntoManagedObjectContext :)'用于类
所以,我在我的自定义类中输入了这段代码:
init(entity: NSEntityDescription!,
insertIntoManagedObjectContext context: NSManagedObjectContext!) {
super.init(entity: entity, insertIntoManagedObjectContext: context)
}
Run Code Online (Sandbox Code Playgroud)
突然,它奏效了!NSManagedObject现在可以向下转换为我的自定义类.我真的不明白为什么这是解决方案,但它的工作原理:)
@Ben Gottlieb的更新在XCode 7.1和Swift 2.0下回答
Run Code Online (Sandbox Code Playgroud)@objc class ImageRecordMO: NSManagedObject{
打开.xcdatamodled文件.
选择您的实体,然后单击右侧面板上的数据模型检查器.
输入班级名称,请参见下图
选择您的模块为Current Product Module,请参见下图.
| 归档时间: |
|
| 查看次数: |
17831 次 |
| 最近记录: |