2015-04-15 15 views
10

Nach der Aktualisierung auf iOS8.3 bekam ich eine Reihe neuer Warnungen, die dort nicht auf iOS8.2 waren. Einer, der mir ins Auge fiel;Auto-Eigenschaft synthetisieren wird keine Eigenschaft synthetisieren - neue Warnung iOS8.3

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

, die in einer '.m' Datei deklariert wurde.

Was hat sich in iOS8.3 geändert, um dies zu einer Warnung zu machen?

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

Ist Ihr View-Controller die 'tableView' zu einem' UITableViewController' hinzugefügt? – Joe

+3

FYI, IBOutlets sollten schwach sein, da die Ansicht selbst eine starke Referenz enthält. Vermeiden Sie Retentionszyklen. https://developer.apple.com/library/mac/documentation/Cocoa/Conceptual/LoadingResources/CocoaNibs/CocoaNibs.html –

+2

@DCGoD die Schrecken des Blick auf Code, den ich schrieb vor 18 Monaten haha ​​ – DevC

Antwort

15

Wenn Sie einen UITableViewController verwenden, wird TableView bereits synthetisiert. (zB. self.tableView ist die TableView des UITableViewControllers).

9

Was hat sich geändert? Der Compiler ist schlauer geworden.

Sie sind wahrscheinlich Unterklasse UITableViewController.

UITableViewController hat bereits eine Eigenschaft namens tableView. Es ist bereits in UITableViewController synthetisiert oder anderweitig implementiert. Die Warnung besagt also, dass Sie keine eigene tableView-Eigenschaft erhalten, sondern dass Sie die von UITableViewController gelieferte erhalten.

Natürlich, wenn Sie keine Kenntnis von der Tableview in UITableViewController waren, und wenn man zu Unrecht davon ausgegangen, dass diese Ihre Eigenschaft ist, unter Ihrer Kontrolle, würde es Ärger geben. Deshalb erhalten Sie eine Warnung. Wenn Sie das also getan haben, war Ihr Code immer kaputt und muss repariert werden.

Aber wenn Sie nur die @property Erklärung in Ihrem Code haben, aber Sie wissen , dass es tatsächlich die UITableViewController Eigenschaft ist, wird kein Schaden angerichtet, aber die @property entfernen, weil es falsch ist.

+0

Danke für die detaillierte Erklärung. Es war der letzte Punkt. Es war wirklich alter Code, den ich mir angesehen habe. Zum Glück wurde es mir zur Kenntnis gebracht. – DevC

12

Ich konfrontiert ähnliches Problem auch. Ich löste das mit der folgenden Methode. In Ihrer .m Datei schreiben Sie @dynamic tableView unter @implementation

Ich hoffe, dass Ihr Problem gelöst wird.

+0

Sie haben einen Charme !! Prost. – salih

+0

Dies entspricht nicht unbedingt der zugrunde liegenden Ursache, dh Sie überschreiben eine in einer Oberklasse definierte Eigenschaft. –

1

Hatte ein ähnliches Problem mit einem benutzerdefinierten UITableViewCell Erstellen einer neuen Eigenschaft namens ImageView. Da eine Eigenschaft mit dem Namen imageView bereits existiert, habe ich die Fehlermeldung erhalten. Ich habe einfach den Namen in projectImageView geändert und es hat funktioniert.

Verwandte Themen