¿Cuáles son las diferencias funcionales entre el 'manual / ninguno' de Coredata CodeGen + crear la subclase 'NSManagedObject' vs. 'categoría / extensión'
He leídoSubclassing NSManagedObject con swift 3 y Xcode 8 beta y leerest gran tutorial. Todavía tengo preguntas sobre algunos puntos.
Las similitudes son: Puedo personalizar ambas clases como quiera. Puedo agregar nuevos atributos o eliminar o renombrar atributos. es decir, paracategory/extension
se actualizará con una nueva compilación (en los datos derivados) y en el caso demanual/none
dejará el archivo de clase intacto y actualizará la extensión en la navegación del archivo, es decir, no terminaré con un archivo duplicado. Todo esto es manejado por Xcode porque están marcados con un preprocesador@NSManaged
Tirar algo como@NSManaged public var name: String?
directamente a una @ existenNSManagedObject
subclase no está permitido. Traté de hacerentity.name = "John"
pero recibí el siguiente error:reason: '-[SomeEntity setName:]: unrecognized selector sent to instance 0x60400009b120'
. Creo que eso es razonable. Creo que sin usar el Editor de modelo de datos básicos no se crean los métodos de acceso setter / getter.Las diferencias son:PorCategory/Extension
solo necesita crear la clase usted mismo y agregar cualquier función / propiedad adicional que necesite.PorCategory/Extension
los atributos se crean en datos derivados que es suficiente. Porque nunca necesitas ver ese archivo. Su existencia es suficiente para que las cosas funcionen.
Y específicamente en el contexto de hacer cambios a sus propiedades de NSManaged:
Tipo de propiedad de cambio, p. @NSDate
aDate
está permitido solo paraManual/None
. Ejemploaqu
String?
aString
está permitido solo paraManual/None
. Ejemploaqu Cambiar un nivel de acceso a la propiedad, p. desdepublic
aprivate
está permitido solo paraManual/None
. Ejemploaqu
eniendo que decir que hay una diferencia significativaS Yo elijoManual/None
codegen y pero no seleccione 'crear subclase NSManagedObject'. En ese caso, comencé a escribir todo el código yo mismo (subclase de NSManagedObject y escribí NSManaged para cada propiedad) ... o si no escribo todo ese código, entonces todavía puedo acceder / configurar campos usando KVC, ¡lo cual es incómodo! @
n pocas palabras, solo estoy tratando de descubrir el alcance total de las capacidades que puedo obtener al usarManual/None
.
Pregunta Aparte del 9 notas que necesito saber si he validado correctamente, una @ importanpregunt sería: ¿cómo estoy cambiandoNSDate
aDate
u opcional a no opcional, no rompa las asignaciones entre mi clase NSManagedObject y mi gráfico de objetos todo mientras cambio unNSDate
propiedad aString
se rompe !! ¿Tiene esto algo que ver con cosas que han garantizado la conversión entre Swift y Objective-C, es decir, cosas que se pueden lanzar a través deas
- sin?
o!
?