Duplicar error de símbolo al agregar subclass NSManagedObject, enlace duplicado

Estaba intentando crear subclasss NSManagedObject (2 entidades relacionadas) automáticamente en Xcode. Se generan así:

introduzca la descripción de la imagen aquí

Sin embargo, antes de hacer algo más, cuando traté de comstackrlo y ejecutarlo, se produce un error de enlace, como se muestra:

duplicate symbol _OBJC_CLASS_$_Photo in: /Users/Kefeng/Library/Developer/Xcode/DerivedData/Photomania-aellrakjngugnzcgrleiytvrfvyt/Build/Intermediates/Photomania.build/Debug-iphonesimulator/Photomania.build/Objects-normal/x86_64/Photo+CoreDataClass.o duplicate symbol _OBJC_METACLASS_$_Photo in: /Users/Kefeng/Library/Developer/Xcode/DerivedData/Photomania-aellrakjngugnzcgrleiytvrfvyt/Build/Intermediates/Photomania.build/Debug-iphonesimulator/Photomania.build/Objects-normal/x86_64/Photo+CoreDataClass.o duplicate symbol _OBJC_CLASS_$_Photography in: /Users/Kefeng/Library/Developer/Xcode/DerivedData/Photomania-aellrakjngugnzcgrleiytvrfvyt/Build/Intermediates/Photomania.build/Debug-iphonesimulator/Photomania.build/Objects-normal/x86_64/Photography+CoreDataClass.o duplicate symbol _OBJC_METACLASS_$_Photography in: /Users/Kefeng/Library/Developer/Xcode/DerivedData/Photomania-aellrakjngugnzcgrleiytvrfvyt/Build/Intermediates/Photomania.build/Debug-iphonesimulator/Photomania.build/Objects-normal/x86_64/Photography+CoreDataClass.o ld: 4 duplicate symbols for architecture x86_64 clang: error: linker command failed with exit code 1 (use -v to see invocation)

Intenté varias veces creando nuevos proyectos y hago lo mismo. Mi intención original es agregar algunos methods personalizados a las subclasss. Pero cuando agrego algo en, por ejemplo, Photo+CoreData.h/m , Photo+CoreData.h/m el mismo error que el anterior.

Encontré algunas respuestas sobre el "doble include" o "save files en el directory incorrecto", pero no hice eso. ¿Alguien tiene alguna idea sobre esto?

Edit: gracias a alguna ayuda de @iPeter, encontré lo siguiente:

Después de hacer el Editor> Generar files NSManagedObject, si trash los files ANTES de build, su proyecto no debe generar problemas.

Papelera de estos archivos

Entonces #import "myManagedObjectName + CoreDataClass.h" (donde el nombre MO es el que está en el inspector de la entidad en los datos centrales) en cualquier class donde requiera esos Objetos Managed.

En otras palabras, no requiere ninguno de los files reales de ManagedObject en su carpeta. Xcode guarda los generados en su carpeta Derived Data.

Si por alguna razón necesita que esos files permanezcan en su directory de files, la siguiente solución funcionará. Vaya a su destino y elimine las fonts de CoreDataClass en sus orígenes de compilation.

antes de

Dejándote esto:

Después

  • La mayoría de los nuevos attributes / relaciones que agregué después de la generación inicial de subclasss ManagedObject estuvieron disponibles como properties después de una compilation. En un caso en el que cambié el nombre de una relación existente, tuve que volver a hacer el Editor> Generar subclasss NSManagedObject, luego cambié los files nuevos de mi carpeta, construidos y todo funcionó correctamente.

Simplemente escribí una publicación de blog que incluye esta información para cualquier persona interesada.

Si no genera la subclass de object gestionado automáticamente, no olvide marcar la configuration "Codegen" para una entidad en el Inspector de model de datos:

introduzca la descripción de la imagen aquí

Debe eliminar todas estas entidades, cambiar la configuration de "Codegen" a "Manual / None" para ellos en el Inspector de model de datos y generar entidades nuevamente. ¡Funciona bien! No es necesario eliminar los files + CoreDataClass.h de Compile Source. No necesita entidades de marca como abstractas. No necesita generar classs usted mismo. Debe cambiar solo la configuration de "Codegen" y regenerar las entidades automáticamente. introduzca la descripción de la imagen aquí

Debe eliminar la subclass relacionada con CoreData generada por usted mismo, y puede mantener la línea #import con esas classs, ahora todos esos files se generarán automáticamente al build el proyecto.

Recientemente probé la respuesta anterior y falló. De alguna manera, Xcode seguía generando los files.

Lo solucioné usando el siguiente método:

  • Marcar todas las entidades como abstractas
  • Construir
  • Eliminar bandera abstracta
  • Construir
  • El exito

Esto suena como un error en Xcode …