2012-09-20 22 views
25

Después de actualizar a la última versión de Xcode 4.5 para iOS 6 ayer por la noche, me sale advertencias y errores como este@property automática no sintetizan trabajando en NSManagedObject subclase

Propiedad 'mapAnnotation' requiere método 'mapAnnotation' para ser definido - uso @synthesize, @dynamic o proporcionar una implementación del método en esta implementación de la clase

debido a que faltan declaraciones @synthesize, e incluso los errores sobre Ivars desconocidos si los uso.

La cuestión 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 haber actualizado Xcode anoche (he eliminado un montón de declaraciones @synthesize de mis archivos en ese entonces) es aún todavía en las NOTAS dE lANZAMIENTO:

• comando de Objective-C @synthesize se genera por omisión cuando se utiliza propiedades.

Así que estoy confundido, ¿me falta un nuevo Project-Setting que activa la generación de @synthesize automática?

Pero ni siquiera está funcionando cuando creo un nuevo proyecto y probarlo

+0

Tengo exactamente el mismo problema. Parece que no está funcionando en nsmanagedobject. – Devfly

+0

¡Yo también! ¿Alguien ha encontrado una solución? – Marky

+1

@Devfly, no reconocí esto al principio, pero tiene razón, parece que simplemente no funciona en NSManagedObject y las subclases de los mismos. – MeXx

Respuesta

35

que se enfrentó al mismo problema y encontrar la razón y la solución.

Si mira 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.

(Se puede ver los NS_REQUIRES_PROPERTY_DEFINITIONS en el diff API entre iOS 5.1 e iOS 6.0.)

Esto se debe a que el compilador tiene que saber si desea una propiedad que sea dinámica o sintetizados 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.

+3

He recibido una respuesta del soporte de desarrollo de Apple, es básicamente lo que dijo: "La ADNnotación es un descendiente de NSManagedObject que impone una restricción sobre la síntesis automática de propiedades. NSManagedObject requiere que todas las propiedades definidas en subclases de la misma se sinteticen explícitamente por el programador. Tendrá que agregar una declaración dinámica (at) sintetizada o apropiada (at) para la propiedad mapAnnotation ". – MeXx

+0

También ocurre con CMMotionManager, que no tiene ningún NS_REQUIRES_PROPERTY_DEFINITIONS en su archivo de encabezado ... – cfischer

Cuestiones relacionadas