我有一个字典,我将所有数据作为新对象插入到数据库中。问题是当我尝试强制转换新创建的对象时,它在异常中给出了异常:
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
}
我还有一个名为NSManagedObject
的{{1}}的子类,它与Group类具有相同的结构。如果我用AppData
替换Group,那么在插入部分代码时,它可以工作,我可以插入到AppData
表中。正如我之前所说,除参数外,它们具有相同的结构。但是当我尝试插入Group对象时,它给了我动态转换异常。我该如何解决这个问题?
答案 0 :(得分:2)
我通过不同地初始化实体对象来解决问题,如果你从超类(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
所以这就是问题,并且无法通过这种方式将对象转换为自定义托管对象类。谢谢大家。