无法为名为的类创建映射策略(Cocoa错误134110)

时间:2015-01-27 11:52:41

标签: ios swift core-data

我在Core Data中进行手动/重度迁移。我有数据模型,即myApp2.xcdatamodelmyApp3.xcdatamodel

myApp3在两个表之间有一个新表(如联结表),它们都处于TO-MANY关系。

此外,我已经定义了NSEntityMigrationPolicy。现在当我运行这个自定义策略(特别是为关系编写并管理数据)时,我在调用migrationManager.migrateStoreFromURL

时会特别收到此错误
Optional("Error Domain=NSCocoaErrorDomain Code=134110 \"The operation couldn’t be completed. (Cocoa error 134110.)\" UserInfo=0x7feda0d825b0 {NSUnderlyingException=Couldn\'t create mapping policy for class named (MyTableToMyTablePolicy)}")

我试图查看此错误,但是从某种方式来看,它的目标是我在下面粘贴的Policy类。

class MyTableToMyTablePolicy: NSEntityMigrationPolicy {

    override func createDestinationInstancesForSourceInstance(sourceInstance: NSManagedObject, entityMapping mapping: NSEntityMapping, manager: NSMigrationManager, error: NSErrorPointer) -> Bool {

        let sourceKeys:[AnyObject] = sourceInstance.entity.attributesByName.keys.array
        let sourceValues = sourceInstance.dictionaryWithValuesForKeys(sourceKeys)

        let destinationInstance:NSManagedObject = NSEntityDescription.insertNewObjectForEntityForName(mapping.destinationEntityName!, inManagedObjectContext: manager.destinationContext) as NSManagedObject

        let destinationKeys = destinationInstance.entity.attributesByName.keys.array as [AnyObject]

        if mapping.userInfo!["modelVersion"]!.integerValue == 2 {

            for key in destinationKeys {
                let value:AnyObject = sourceValues[key as String]!
                if value.hasText() {
                    destinationInstance.setValue(value, forKey: key as String)
                }
            }

        }
        else { // call the super just
            super.createDestinationInstancesForSourceInstance(sourceInstance, entityMapping: mapping, manager: manager, error: error)
        }

        manager.associateSourceInstance(sourceInstance, withDestinationInstance: destinationInstance, forEntityMapping: mapping)

        return true
    }
}

以下是xcdatamodels myApp2和myApp3:

myApp2

myApp3

更新:崩溃日志:

enter image description here

1 个答案:

答案 0 :(得分:0)

首先,

在iOS上进行大量迁移是一个坏主意(tm)。重型迁移并不意味着在CPU有限,内存有限且启动时间有限的设备上运行。

其次,

您可能只显示部分错误。你能展示整个错误堆栈吗?通常,Core Data错误包含可以通过访问-userInfo字典打印出的内部错误。这将使我们更深入地了解错误。

最后,

调试器在哪里突破?什么行抛出错误?