2015-04-23 22 views
11

erzeugen. Ich habe eine Unterklasse von UICollectionViewController erstellt und sie LibraryCollectionViewController genannt und beide Kontrollkästchen für das Projekt und den Test markiert. Außerdem ist es die Storyboard-ID LibraryCollectionViewController und die entsprechende Klasse im Interface Builder.Swift konnte keinen Wert vom Typ

Sein neues, Swift und iOS Testing Ich ging und versuchte, die View-Controller in meinem Testfall zu instanziiert wie folgt:

let storyboard = UIStoryboard(name: "Main", bundle: nil) 
let libraryCollectionVC = storyboard.instantiateViewControllerWithIdentifier("LibraryCollectionViewController") as! LibraryCollectionViewController 

Und ich die folgende Fehlermeldung erhalten:

Could not cast value of type 'MyApp.LibraryCollectionViewController' (0x1010b01f0) to 'MyAppTests.LibraryCollectionViewController' (0x10bd7f580). 

So ist es klar, dass es nicht Casting ist, aber da ich Swift immer noch neu bin, kann ich nicht feststellen, ob der Fehler selbst verursacht wird durch:

  1. habe ich etwas falsch, wenn die Unterklasse zu schaffen, und ich bin Referenzierung ein anderes (Ergo die MyApp. [Vc] vs MyAppTests. [Vc])
  2. Das Casting mit as! falsch ist
  3. Beliebig anderer grund

Jede Hilfe wäre zu schätzen, danke im Voraus.

Update 1: Als ich die View-Controller zu schaffen, der letzte Schritt zeigt zwei Kontrollkästchen unter einem Ziel Header, ich aktiviert beide, dass die Ursache sein könnte?

+1

Haben Sie die benutzerdefinierte Klasse in IB definiert? (BTW, ich denke, es sollte zurück UIStoryboard (Name: "Main", Bündel: NSBundle.mainBundle().) – matthias

+0

In IB ich die Klasse (unter "Custom Class" Header) zu LibraryCollectionViewController.Ich werde das Bündel versuchen –

+0

@matthias Mit bundle gab das gleiche Ergebnis :( –

Antwort

0

Try this:

  • öffnen LibraryCollectionViewController.swift
  • Press Option + Befehl + Datei-Inspektor
  • Finden Ziel Mitgliedschaft Abschnitt
  • prüfenzu öffnen
-1

Ich hatte das gleiche Problem. Sie müssen:

  1. Löschen Sie Ihre Klasse und ihre Datei.
  2. Öffnen Sie Ihre xcdatamodeld-Datei.
  3. Wählen Sie die Klasse aus, die Probleme verursacht.
  4. Klicken Sie auf "Editor" auf Xcode.
  5. Klicken Sie auf "Create NSManagedObject Subclass", es wird die Klasse für Sie neu erstellen.
5

Mein Problem war, war ich Referenzierung NSBundle.mainBundle() von den Unit-Tests während ich verwenden benötigt:

let bundle = NSBundle(forClass: self.classForCoder) 
+0

Das war mein Problem, danke für die Antwort! –

0

Sie müssen nicht beide die Ziele für die View-Controller überprüfen. Sie müssen nur das Projektziel für den Ansichtscontroller aktivieren. Sie müssen das Klassenmodul wie @testable import myprojectname in die Testfalldatei importieren, anstatt beide Ziele zu aktivieren.

1

Dies kann passieren, wenn eine Klasse Mitglied zwei Ziele ist (vielleicht zwei Frameworks?) - und Ihre App irgendwie einen Rahmen, während das Gerät Testziel das zweite Ziel verweist verweisen.

Damit wird eines der kompilierten Artefakte hat einen vollständig qualifizierten Typen Framework1.MyClass, während die anderen Framework2.MyClass ist - und sie sind verschiedene Klassen zur Laufzeit, da sie unterschiedliche Namensräume haben. (Obwohl beide Klassen aus derselben Swift-Quelldatei kompiliert werden)

Verwandte Themen