Ich habe meine App wie unten. Ich konfiguriere einen Übergang von der ersten Szene zur zweiten, wenn der Benutzer auf die Rock-Taste klickt, mit der Rock-Methode (ohne einen Übergang). Aber wenn ich die App starte, erhalte ich den folgenden Fehler. Bitte lassen Sie mich wissen, was das Problem ist? Ist das Storyboard-Objekt, auf das sich das Label bezieht, noch nicht erstellt? IOS Storyboard-Objekte
Antwort
Entweder secvc
oder seine label
Eigenschaft sind nil
. Legen Sie einen Haltepunkt für diese Zeile fest und überprüfen Sie den jeweiligen Wert, bevor diese Zeile ausgeführt wird, um zu sehen, welcher Wert nil
ist.
Sie können den Text nicht festgelegt, weil das Etikett noch nicht erstellt, weil die Viewcontroller Sicht auf Ihre zweite ist nicht an der Zeit, Ihren Versuch so stellen Sie den Text des Etiketts
geladen wird Eine mögliche Lösung wäre, in Ihrem zweiten View-Controller
var text: String!
hinzuzufügen. Setzen Sie diese var in Ihrer Rock-Funktion:
secvc.text = "rock ..."
und stellen Sie den Text Ihres Etiketts später im viewDidLoad()
(die Ansicht wird nun geladen und das Etikett erstellt wurde) Funktion des zweiten Viewcontroller:
label.text = text
Hey Sam danke für die Antwort. Ich habe herausgefunden, dass es das Label ist. Aber könnten Sie bitte erklären, wie die Storyboard-Objekte erstellt und instanziiert werden. Weil das label-Objekt zur Laufzeit aus der nib-Datei geladen wird, dachte ich, ich könnte die outlet-Eigenschaft verwenden, um darauf zuzugreifen. – Swifty
Ich bin ein Anfänger in Swift selbst, aber wenn Sie einen ViewController instanziieren, werden die IBOutlets noch nicht erstellt, weil die Ansicht des ViewControllers noch nicht geladen ist. Es wird geladen, sobald Sie 'self.present (...)' aufrufen. – eLwoodianer
Das Storyboard ist eine XML-Datei. Es wird geladen und analysiert und dann verwendet, um alle Objekte in der Storyboard zu instanziieren und sie mit den Outlets in Ihrem ViewController zu verbinden. Diese Verbindung wird erst dann garantiert, wenn viewDidLoad aufgerufen wird. Deshalb legen Sie im Quellcode-Controller eine Eigenschaft fest (Ihre Outlets sind noch nicht vorhanden), und dann in viewDidLoad (Ihre Outlets sind jetzt vorhanden) können Sie diese Eigenschaft der .text -Eigenschaft Ihres Outlets zuweisen. –
Ein netter generischer Ansatz besteht darin, eine NSDictionary -Eigenschaft auf einem View-Controller zu definieren und dann diese Eigenschaft einfach vom Aufrufer aus zu setzen. Dann können Sie in der viewDidLoad auf das Wörterbuch zugreifen und alle Widgetdaten aus den verschiedenen Feldern im dict ausfüllen. Dies berücksichtigt die Lebensdauer des GUI-Widgets und erleichtert Ihnen die Arbeit, da nur Daten ausgetauscht werden. Übermitteln Sie auf diese Weise keine Refs an irgendwelche UI * -Objekte, und vermeiden Sie, sich mit Ref-Count-Loops in den Fuß zu schießen.
Genauer gesagt würde ich eine Instanz einer Klasse/eines Modells an den anderen View-Controller anstelle eines Wörterbuchs übergeben. VIEL besser lesbar. – AdamPro13
Nun, sicher, ein komplettes Modellobjekt ist besser, aber es dauert auch länger, die erste Revision des Codes zu machen. Ein Wörterbuch ist mindestens besser als bestimmte Felder im View-Controller zu setzen, die noch nicht einmal vollständig aufgebaut sind. – MoDJ
- 1. IOS
- 2. Wie hoch ist eine UITabBar auf iOS 8, iOS 9, iOS 10 und iOS 11?
- 3. Unterschiede zwischen iOS 7 zu iOS 7.1
- 4. UIActivityViewController Problem iOS 7 und iOS 8?
- 5. IOS - bei dem Gewinde ios Selektoren läuft
- 6. Systemschriftart für iOS 8 und iOS 9
- 7. Wie zielen iOS 5 und iOS 6
- 8. Detect iOS Simulator vs iOS Gerät
- 9. IOS: Deaktivieren Spirale eines Superview in IOS
- 10. DispatchQueue.main.async Verfügbarkeit iOS 10 Werke vor iOS
- 11. Debuggen von iOS EXC_BAD_ACCESS KERN_INVALID_ADDRESS unter iOS
- 12. iOS - Beginn iOS Tutorial - Unterstrich vor Variable?
- 13. Unterschied zwischen ios :: app und ios :: ate
- 14. IOS UISearchBar Hintergrundfarbe in iOS 9
- 15. IOS Videokompression Swift iOS 8 korrupte Videodatei
- 16. iOS: Lokalisierung Problem auf iOS 9
- 17. iOS 10 Kompatibilität zu iOS 9 Apps
- 18. iOS 10,0 bis iOS 11API Unterschiede
- 19. iOS-Anwendung ähnlich wie iOS Sprungbrett Verhalten
- 20. iOS: UIButton Zeichnen Kreis Grenze in iOS
- 21. iOS Hintergrundmodus
- 22. iOS Authentifizierungsprozess
- 23. NativeScript Ios
- 24. iOS-Kompatibilität
- 25. Bildschirmausrichtung ios
- 26. IOS CALayerInvalidGeometry
- 27. IOS-Simulator
- 28. in IOS
- 29. iOS-Regionsüberwachung
- 30. TapGestures Ios
Ich bin sicher, es ist das Etikett. Ich habe eine andere Instanzeigenschaft von secviewcontroller erstellt und sie anstelle des Labels in der Rock-Methode verwendet, und es hat gut funktioniert. Ich möchte nur wissen, wann das Label-Objekt in diesem Szenario erstellt wird. – Swifty