xcode - El sintetizador automático de propiedad @ no funciona en la subclase NSManagedObject
properties ios6 (1)
Después de actualizar a la última versión de Xcode 4.5 para iOS6 anoche, recibo advertencias y errores como este
La propiedad ''mapAnnotation'' requiere que se defina el método ''mapAnnotation'' - use @synthesize, @dynamic o proporcione una implementación de método en esta implementación de clase
debido a que faltan @synthesize Statements, e incluso errores sobre iVars desconocidos si los uso.
El problema es que pensé que no era necesario escribir estas declaraciones @synthesize desde la última actualización de Xcode a 4.5 que salió con Mountain Lion, Y todos mis proyectos funcionaron sin ellos antes de actualizar Xcode anoche (eliminé un montón de declaraciones de @synthesize de mis archivos en ese entonces) Incluso está en las Notas de la versión:
• El comando Objective-C @synthesize se genera de forma predeterminada cuando se usan propiedades.
Así que estoy confundido, ¿me estoy perdiendo una nueva configuración de proyecto que activa la generación de @synthesize automática?
Pero ni siquiera funciona cuando creo un nuevo proyecto y lo intento.
Me enfrenté al mismo problema y encontré la razón y la solución.
Si observa el archivo de encabezado de NSManagedObject en iOS 6 SDK, verá "NS_REQUIRES_PROPERTY_DEFINITIONS" que obliga a las clases a especificar @dynamic o @synthesize para las propiedades.
(Puedes ver NS_REQUIRES_PROPERTY_DEFINITIONS en la diferencia de API entre iOS 5.1 y iOS 6.0).
Esto se debe a que el compilador debe saber si desea que una propiedad sea dinámica o sintetizada, especialmente en la implementación de una subclase de la clase NSManagedObject.
Podría resolver este problema simplemente agregando las líneas @synthesize explícitamente para las propiedades que no sean @dynamic en las subclases NSManagedObject.