Error de NSKeyedUnarchiver después de cambiar el nombre del proyecto Xcode

Acabo de cambiar el nombre de mi proyecto Xcode y cuando lo ejecuté obtuve este error:

2015-11-14 05: 32: 42.337 Buck Tracker [3537: 1456100] * Aplicación de finalización debido a la exception no detectada 'NSInvalidUnarchiveOperationException', motivo: '* – [NSKeyedUnarchiver decodeObjectForKey:]: no puede decodificar object de class (iBudgeter.Record) para key (NS.objects); la class puede definirse en código fuente o en una biblioteca que no está vinculada '

Buck Tracker es el nuevo nombre y iBudgeter es el nombre original. Record es un NSObject personalizado que creé para almacenar algunos datos.

Intenté cambiar el nombre del proyecto a iBudgeter pero no funcionó. Revertir a una versión anterior en git ayudó, pero tuve el mismo error cuando lo cambié de nombre.

Entonces, ¿alguna sugerencia?

No cambies el nombre de tu proyecto. Simplemente cambie el nombre para mostrar. Es la input "Nombre de presentación del package" en su Info.plist. Probablemente deba agregar la input.

agregando el nombre de visualización del paquete a Info.plist

Consulte esta respuesta si desea cambiar el nombre de visualización de una aplicación OS X.

Otra forma es arreglar el nombre de la class utilizada para NSCoding. Simplemente tiene que usar:

  • NSKeyedArchiver.setClassName("Record", forClass: Record.self antes de serializar
  • NSKeyedUnarchiver.setClass(Record.self, forClassName: "Record") antes de deserializar

donde sea necesario.

Parece que las extensiones de iOS prefijan el nombre de la class con el nombre de la extensión.

En caso de que haya movido su file a otro module, necesitará agregar información adicional

 NSKeyedArchiver.setClassName("OldModule.ClassName", for: ClassName.self) NSKeyedUnarchiver.setClass(ClassName.self, forClassName: "OldModule.ClassName")