我有一本字典,里面有我想要作为新对象插入数据库的所有数据。问题是当我尝试强制转换新创建的对象时,它给了我异常:
libswift_stdlib_core.dylib`swift_dynamicCast:
汇编代码的一部分。 我正在使用的代码是这样的:
var group:Group
if (array.count == 0) {
group = NSEntityDescription.insertNewObjectForEntityForName("Group", inManagedObjectContext:appDelegate.managedObjectContext) as Group
}
Group类的结构如下:
@objc(Group)
class Group:NSManagedObject{
@NSManaged var createDate:NSString
@NSManaged var groupPictureUrl:NSString
@NSManaged var groupTypeId:NSString
@NSManaged var isDepartment:NSString
@NSManaged var lastMessageRead:NSString
@NSManaged var name:NSString
@NSManaged var unreadMessageCount:NSString
@NSManaged var groupId:NSString
@NSManaged var lastSync:NSString
}
我还有一个名为 AppData
的 NSManagedObject 子类,它与 Group 类具有相同的结构。在插入部分代码时,如果我用 AppData 替换 Group,它就可以工作,并且我可以插入到 AppData 表中。正如我之前所说,除了参数之外,它们具有相同的结构。但是当我尝试插入 Group 对象时,它给了我动态转换异常。我该如何解决这个问题?
最佳答案
如果您从父类(super class)(NSManagedObject)实现启动方法,例如:(在 Group.swift 中),我通过以不同方式初始化实体对象来解决问题
init(entity: NSEntityDescription!, insertIntoManagedObjectContext context: NSManagedObjectContext!) {
super.init(entity: entity, insertIntoManagedObjectContext: context)
}
你可以像这样创建对象:
var desc:NSEntityDescription = NSEntityDescription.entityForName("Group",inManagedObjectContext:appDelegate.managedObjectContext)
var group:Group = Group(entity:desc, insertIntoManagedObjectContext: appDelegate.managedObjectContext)
我读过的大多数解决方案都是这样启动的:
var group:Group = NSEntityDescription.insertNewObjectForEntityForName("Group", inManagedObjectContext:appDelegate.managedObjectContext) as Group
所以这就是问题所在,无法用这种方式将对象转换为自定义托管对象类。谢谢大家。
关于ios - 将新对象插入数据库时出现 SwiftdynamicCast 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25200149/