将新对象插入数据库时​​出现Swift dynamicCast错误

时间:2014-08-08 09:27:46

标签: ios core-data swift nsmanagedobject dynamic-cast

我有一个字典,我将所有数据作为新对象插入到数据库中。问题是当我尝试强制转换新创建的对象时,它在异常中给出了异常:

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对象时,它给了我动态转换异常。我该如何解决这个问题?

1 个答案:

答案 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

所以这就是问题,并且无法通过这种方式将对象转换为自定义托管对象类。谢谢大家。