unrecognized selector geschickt Instanz - Swift 4 nur
Ich habe Schwierigkeiten zu verstehen, was dieser Fehler bedeutet. Meine app war in Ordnung arbeiten, bis ich migriert bis zu Swift 4. Nun werde ich diese tableView:numberOfRowsInSection
Fehler beim öffnen mehrere der my view-Controller. Ich habe nicht diesen Fehler in Swift 3.2. Die numberOfRowsInSection Methode umgesetzt wurde, in allen Fällen, und scheint fein. Kann jemand mich in die richtige Richtung?
2017-11-26 10:21:04.973523-0600 Y2GOsp[27701:6382461]
-[Y2GOsp.ClientDetailViewController tableView:numberOfRowsInSection:]: unrecognized selector geschickt Instanz 0x7fa51c89f000 2017-11-26
10:21:43.328635-0600 Y2GOsp[27701:6382461] *** Terminating app due to
uncaught exception 'NSInvalidArgumentException', Grund:
'-[Y2GOsp.ClientDetailViewController
tableView:numberOfRowsInSection:]: unrecognized selector geschickt
Beispiel 0x7fa51c89f000'
numberOfRowsInSection Implementierungen:
Beispiel 1:
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return 1
}
Beispiel 2:
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return dayAppoints.count
}
numberOfRowsInSection
Umsetzung auf die Frage.Sind Sie sich bewusst, dass Sie schrieb
tableview:…
statt tableView:…
?Wirkt sich das hinzufügen
@objc
bevor Sie die func-Erklärung, damit es funktioniert?Hat deine Klasse Zustand dessen Einhaltung
UITableViewDataSource
? Wenn es das tut, Swift sollte ableiten (und müssen), dass Ihre Implementierung(en) der @objc
- Protokoll-Anforderungen sind auch @objc
. Würde es helfen, wenn man etwas mehr Kontext.Das würde es erklären. Ich bin überrascht, dass Swift nicht beschweren, wenn Sie zugewiesen delegieren.
InformationsquelleAutor Lastmboy | 2017-11-26
Du musst angemeldet sein, um einen Kommentar abzugeben.
@Hamish identifiziert das Problem in seinem Kommentar. Sie vergaß hinzuzufügen
UITableViewDataSource
zu Ihremclass
Erklärung. Weil das so ist, Datenquelle Methoden nicht ausgesetzt waren, zu Objective-C.Mein Vorschlag, versuchen Sie
@objc
zu den Methoden bestätigt das Problem.Den Grund dieser arbeitete in Swift 3 war, dass alle Methoden von Klassen, die abgeleitet aus
NSObject
(dieUIViewController
macht) zur Verfügung zu Objective-C.Swift 4 (durch SE-0160), ist es notwendig, explizit zu-tag-Funktionen mit
@objc
aufgerufen wird, durch einen voter, es sei denn, Sie überschreiben eine Funktion, die so markiert in der base-Klasse, oder in diesem Fall, wenn die Funktionen erfüllen die Anforderung an ein@objc
Protokoll definition.InformationsquelleAutor vacawama
Ich hatte das gleiche Problem und ich folgte vacawama Vorschläge. Aber anstatt @objc vor jeder Delegierte Methode (ich finde die @objc-tags sehr hässlich), ich habe meine ViewController Umsetzung der UITableViewDataSource und UITableViewDelegate Protokolle (ich habe eine generische VC mit einer UITableView) vergeben und meine ViewController seinen tableView ausdrücklich als datasource und delegate:
und es funktioniert wie ein Charme, ohne hässliche @objc-tags.
In der Tat, ich ursprünglich zugewiesen der delegate und datasource auf die tableView mit dem InterfaceBuilder (mittels Strg + Klick)
InformationsquelleAutor AleGiovane