Не удалось создать политику сопоставления - Основные данные iOS

Я пытаюсь использовать специальную политику переноса в приложении, которое я собираю. До сих пор миграция работала с v1 → v2 при использовании модели сопоставления. Однако всякий раз, когда я добавляю настраиваемую политику к сопоставлению сущности, миграция отказывается работать для v2 → v3.

Пользовательская миграционная политика:

import Foundation
import CoreData

class ObjectCustomV2V3Migration: NSEntityMigrationPolicy {

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

    var newObject:NSManagedObject? = NSEntityDescription.insertNewObjectForEntityForName(mapping.destinationEntityName!, inManagedObjectContext: manager.destinationContext) as? NSManagedObject

    // Sets attr31 - string attribute
    var str:String = sInstance.valueForKey("attr21") as String
    if str == "" {
        str = "BlanketyBlank"
    }
    newObject?.setValue(str, forKey: "attr31")

    // Sets attr32 (int16 attribute) as double of value in previous version
    // ignore the dodgy type casting.
    var num:Int = sInstance.valueForKey("attr22") as Int
    num *= 2
    var num16 = NSNumber(integer: num)

    newObject?.setValue(num16, forKey: "attr32")



    if newObject != nil {
        manager.associateSourceInstance(sInstance, withDestinationInstance: newObject!, forEntityMapping: mapping)
        return true
    }


    return false


   }
}

и когда я запустил приложение, возвращается следующая ошибка:

2015-07-10 14:32:42.952 SingleDBMigration[2153:739674] CoreData: error: -addPersistentStoreWithType:SQLite configuration:(null) URL:file:///var/mobile/Containers/Data/Application/6C142EC2-02DB-4BD6-8428-5739C57C7795/Documents/SingleDBMigration.sqlite options:{
    NSInferMappingModelAutomaticallyOption = 0;
    NSMigratePersistentStoresAutomaticallyOption = 1;
} ... returned error Error Domain=NSCocoaErrorDomain Code=134110 "The operation couldn’t be completed. (Cocoa error 134110.)" UserInfo=0x17ecad70 {NSUnderlyingException=Couldn't create mapping policy for class named (ObjectCustomV2V3Migration)} with userInfo dictionary {
    NSUnderlyingException = "Couldn't create mapping policy for class named (ObjectCustomV2V3Migration)";
}
2015-07-10 14:32:42.965 SingleDBMigration[2153:739674] Unresolved error Optional(Error Domain=YOUR_ERROR_DOMAIN Code=9999 "Failed to initialize the application saved data" UserInfo=0x17eaf880 {NSLocalizedDescription=Failed to initialize the application saved data, NSUnderlyingError=0x17ecad90 "The operation couldn’t be completed. (Cocoa error 134110.)", NSLocalizedFailureReason=There was an error creating or loading the application saved data.}), Optional([NSLocalizedDescription: Failed to initialize the application saved data, NSUnderlyingError: Error Domain=NSCocoaErrorDomain Code=134110 "The operation couldn’t be completed. (Cocoa error 134110.)" UserInfo=0x17ecad70 {NSUnderlyingException=Couldn't create mapping policy for class named (ObjectCustomV2V3Migration)}, NSLocalizedFailureReason: There was an error creating or loading the application saved data.])

с важной частью:

NSUnderlyingException=Couldn't create mapping policy for class named (ObjectCustomV2V3Migration)

Я пробовал несколько вопросов, которые я нашел по этой проблеме, и ни один из них не предоставил удовлетворительных решений. Я был бы очень благодарен, если бы кто-нибудь мог пролить свет на проблему, с которой я сталкиваюсь!

Спасибо!

Ответы

Ответ 1

В конце концов я решил это, поняв ответ на аналогичный вопрос. Я забыл добавить пространство имен проектов, поэтому вместо того, чтобы указывать имя настраиваемой политики как ObjectCustomV2V3Migration в модели сопоставления, я должен был использовать ProjectModuleName.ObjectCustomV2V3Migration.

Ответ 2

Моя проблема заключалась в том, что в моем имени проекта были пробелы, поэтому в редакторе модели сопоставления пользовательская политика должна быть указана с использованием символов подчеркивания вместо пробелов при указании имени модуля Swift.

Например, чтобы указать класс MyCustomMigrationPolicy в проекте с именем My App Name, я использовал следующую редакцию в редакторе:

My_App_Name.MyCustomMigrationPolicy