2012-09-20 6 views
25

Dopo l'aggiornamento alla versione più recente di Xcode 4.5 per iOS6 la notte scorsa, ottengo Avvisi ed errori come questo@property automatica non sintetizzano lavorare su NSManagedObject sottoclasse

Proprietà 'mapAnnotation' richiede metodo 'mapAnnotation' essere definito - uso @synthesize, @dynamic o fornire un'implementazione metodo in questa classe di implementazione

a causa di dichiarazioni @synthesize mancanti, e anche gli errori su Ivars sconosciuti se io li uso.

Il fatto è, ho pensato che non era necessario scrivere queste dichiarazioni @synthesize dall'ultimo aggiornamento di Xcode a 4.5 uscito con Mountain Lion, E tutti i miei progetti hanno funzionato senza di essi prima di aver aggiornato Xcode ieri sera (Ho cancellato un sacco di dichiarazioni @synthesize dal mio file di allora) E 'addirittura ancora nel comunicato-Notes:

• Objective-C @synthesize comando viene generato per impostazione predefinita quando utilizzando le proprietà.

Quindi sono confuso, mi manca una nuova impostazione di progetto che attiva la generazione @synthesize automatica?

Ma non è nemmeno lavorando quando creo un nuovo progetto e provo

+0

Ho lo stesso identico problema. Sembra che non stia funzionando su nsmanagedobject. – Devfly

+0

Anch'io! Qualcuno ha ancora trovato una soluzione? – Marky

+1

@Devfly, all'inizio non l'ho riconosciuto, ma hai ragione, sembra non funzionare su NSManagedObject e le sue sottoclassi. – MeXx

risposta

35

Ho affrontato lo stesso problema e ha trovato la ragione e la soluzione.

Se si guarda il file di intestazione di NSManagedObject in iOS 6 SDK, vedrai "NS_REQUIRES_PROPERTY_DEFINITIONS" che forza le classi a specificare @dynamic o @synthesize per le proprietà.

(È possibile visualizzare i NS_REQUIRES_PROPERTY_DEFINITIONS del diff API tra iOS 5.1 e iOS 6.0.)

Questo perché il compilatore deve sapere se si desidera una proprietà di essere dinamica o sintetizzati in particolare nella realizzazione di un sottoclasse della classe NSManagedObject.

Potrei risolvere questo problema semplicemente aggiungendo le righe @synthesize esplicitamente per le proprietà diverse da @dynamic nelle sottoclassi NSManagedObject.

+3

Ho ricevuto una risposta dal supporto per sviluppatori di Apple, fondamentalmente è quello che hai detto: "DNAnnotation è un discendente di NSManagedObject che impone una restrizione sull'autosintesi delle proprietà. NSManagedObject richiede che tutte le proprietà definite in sottoclassi di esso vengano esplicitamente sintetizzate dal programmatore. Sarà necessario aggiungere un'istruzione appropriata (at) synthesize o (at) dynamic per la proprietà mapAnnotation. " – MeXx

+0

Succede anche con CMMotionManager, che non ha NS_REQUIRES_PROPERTY_DEFINITIONS nel suo file di intestazione ... – cfischer