2015-04-15 5 views
10

Dopo l'aggiornamento a iOS8.3 ho iniziato a ricevere una serie di nuovi avvisi che non erano presenti su iOS8.2. Uno in particolare che ha attirato la mia attenzione;La proprietà auto sintetizza non sintetizza la proprietà - nuovo avviso iOS8.3

@property (strong, nonatomic) IBOutlet UITableView *tableView; 

che è stato dichiarato in un file '.m'.

Cosa è cambiato in iOS8.3 per rendere questo un avviso?

Auto property synthesis will not synthesize property 'tableView'; it will be implemented by its superclass, use @dynamic to acknowledge intention 
+0

Il controller di visualizzazione è stato aggiunto a 'tableView' a' UITableViewController'? – Joe

+3

FYI, IBOutlets dovrebbe essere debole poiché la vista stessa ha un forte riferimento. Evitare cicli di ritenzione. https://developer.apple.com/library/mac/documentation/Cocoa/Conceptual/LoadingResources/CocoaNibs/CocoaNibs.html –

+2

@DCGoD gli orrori di guardare il codice che ho scritto 18 mesi fa haha ​​ – DevC

risposta

15

Se si utilizza un UITableViewController, tableView è già sintetizzato. (per esempio self.tableView è la tabellaView di UITableViewController).

9

Che cosa è cambiato? Il compilatore è diventato più intelligente.

Probabilmente stai sottoclassi UITableViewController.

UITableViewController ha già una proprietà denominata tableView. È già sintetizzato o implementato diversamente in UITableViewController. Quindi l'avviso ti dice che non stai ricevendo la tua proprietà TableView, ma che stai ottenendo quella fornita da UITableViewController.

Ovviamente se non si è a conoscenza della tabellaView in UITableViewController e se si assume erroneamente che si tratta di proprietà , sotto il proprio controllo, ci sarebbero problemi. Ecco perché ricevi un avvertimento. Quindi, se è quello che stavi facendo, allora il tuo codice era sempre malamente rotto e doveva essere corretto.

Ma se hai solo la dichiarazione @property nel codice, ma si sa che è in realtà la proprietà UITableViewController, nessun danno è fatto, ma rimuove il @property perché è sbagliato.

+0

Grazie per la spiegazione dei dettagli. Era l'ultimo punto. Era davvero un vecchio codice che stavo guardando. Per fortuna è stato portato alla mia attenzione. – DevC

12

Ho affrontato anche un problema simile. Ho risolto questo con il seguente metodo. Dentro il tuo file .m scrivi @dynamic tableView sotto @implementation

Spero che il tuo problema venga risolto.

+0

Ti piaceva un fascino !! Saluti. – salih

+0

Questo non risolve necessariamente la causa sottostante, ovvero che si sta sovrascrivendo una proprietà definita in una superclasse. –

1

Si è verificato un problema simile con un UITableViewCell personalizzato che creava una nuova proprietà chiamata imageView. Poiché esisteva già una proprietà denominata imageView, continuavo a ricevere il messaggio di errore. Ho semplicemente cambiato il nome in projectImageView e ha funzionato.