Swift, konnte nicht gegossen Wert vom Typ
Ich erstellt eine Unterklasse von UICollectionViewController
und nannte es LibraryCollectionViewController
, und markiert beide Checkboxen für das Projekt und testen. Auch ist es storyboard-id ist LibraryCollectionViewController
und die entsprechende Klasse über interface builder.
Wird neu in Swift und iOS Testen ich ging und versuchte zu instanziieren gesagt-view-controller in meinem test-Fall wie folgt:
let storyboard = UIStoryboard(name: "Main", bundle: nil)
let libraryCollectionVC = storyboard.instantiateViewControllerWithIdentifier("LibraryCollectionViewController") as! LibraryCollectionViewController
Und ich bekomme die folgende Fehlermeldung:
Could not cast value of type 'MyApp.LibraryCollectionViewController' (0x1010b01f0) to 'MyAppTests.LibraryCollectionViewController' (0x10bd7f580).
So ist es klar, dass es nicht Gießen, aber als ich noch neu bin Swift, ich finde mich nicht in der Lage zu bestimmen, ob Sie den Fehler selbst verursacht wird durch:
- Ich etwas falsch gemacht habe beim erstellen der Unterklasse und ich bin das verweisen auf ein anderes (Ergo der Anwendung.[vc] vs MyAppTests.[vc])
- Das casting mit
as!
ist falsch - Einem anderen Grund
Jede Hilfe wäre dankbar, danke im Voraus.
Update 1: Wenn ich das erstellen der view-controller, die den letzten Schritt zeigt 2 Checkboxen unter einem Ziel header, ich konnte beide von Ihnen, könnte das die Ursache sein?
- Hast du das definieren der benutzerdefinierten Klasse in IB? (btw, ich denke, es sollte wieder UIStoryboard(name: "Main" - bundle: NSBundle.mainBundle().)
- In IB ich die Klasse (unter "Custom Class" - header), um LibraryCollectionViewController. Ich werde versuchen, das bundle
- Die Verwendung von bundle gab dasselbe Resultat 🙁
- Ich denke, dass die Ursache ist, dass Sie beide (vielleicht). MyAppTests versuchen, deaktivieren Sie diese ein
- vielleicht hilft UIStoryboard(name: "Main" - bundle: NSBundle(forClass: selbst.dynamicType)) iosmike.com/2014/08/unit-testing-viewcontrollers-in-swift.html
- Das war der trick, danke
Du musst angemeldet sein, um einen Kommentar abzugeben.
Mein problem war, ich war Referenzierung
NSBundle.mainBundle()
von der unit-tests in der Erwägung, dass ich brauchte, um:Dies kann passieren, wenn eine Klasse ein Mitglied von zwei Ziele (vielleicht auch zwei frameworks?) - und Ihre app ist irgendwie auf eine Rahmen während der unit-test-target auf das zweite Ziel.
Also eine der kompilierten Artefakte hat ein vollständig Qualifizierter Art
Framework1.MyClass
während der andereFramework2.MyClass
- und Sie sind verschiedenen Klassen zur Laufzeit, weil Sie haben unterschiedliche Namensräume. (Obwohl beide Klassen kompiliert werden, die von den gleichen Swift-Quellcode-Datei)Versuchen Sie dies:
LibraryCollectionViewController.swift
MyApp
Müssen Sie nicht überprüfen Sie sowohl die Ziele für den view-controller. Sie müssen nur das Projekt-Ziel für den view-controller. Sie müssen importieren Sie die Klasse Modul in den test-Fall-Datei, wie @prüfbar import myprojectname statt ermöglicht sowohl die Ziele.
Hatte ich selbiges Problem, da war ich mit der navigation-controller
Versuchen Sie dies:
Löschen eingebettete navigation controller
Binden diese zwei view-Controllern direkt
ich hoffe, es funktioniert
Ich hatte das gleiche Problem. Sie müssen: