2015-04-23 29 views
11

Utworzono podklasę o nazwie UICollectionViewController i nazwano ją LibraryCollectionViewController i zaznaczono oba pola wyboru dla projektu i testu. Jego identyfikator to LibraryCollectionViewController i ustaw odpowiednią klasę na konstruktorze interfejsów.Swift, nie można było użyć wartości typu

Jako nowy w Swift i iOS Testing poszedłem i próbował wystąpienia powiedział widok kontroler w moim przypadku testu w następujący sposób:

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

A ja otrzymuję następujący błąd:

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

Jest więc oczywiste, że nie jest to rzutowanie, ale ponieważ wciąż jestem nowicjuszem w Swift, nie jestem w stanie stwierdzić, czy sam błąd jest spowodowany przez:

  1. zrobiłem coś źle podczas tworzenia podklasy i mam przedstawieniu inną (Ergo MojaApl. [VC] vs MyAppTests. [VC])
  2. Odlew użyciu as! jest nieprawidłowy
  3. Wszelkie inny powód

Każda pomoc byłaby doceniana, z góry dzięki.

Aktualizacja 1: Kiedy tworzenia kontrolera widoku, ostatni krok pokazuje 2 checkboxes pod docelowy nagłówka, ja włączony obu z nich, to może być przyczyną?

+1

Czy zdefiniowałeś niestandardową klasę w IB? (przy okazji, myślę, że powinien to być powrót UIStoryboard (name: "Main", bundle: NSBundle.mainBundle().) – matthias

+0

W IB ustawiam Class (poniżej nagłówka "Custom Class") do LibraryCollectionViewController. Wypróbuję pakiet –

+0

@matthias Używanie pakietu dało taki sam wynik :( –

Odpowiedz

0

Spróbuj tego:

  • Otwarte LibraryCollectionViewController.swift
  • Prasa Opcja + poleceń + otworzyć File Inspector
  • Znajdź docelowa Członkostwo sekcja
  • Sprawdź MyApp
-1

Miałem ten sam problem. Musisz:

  1. Usunąć klasę i jej plik.
  2. Otwórz swój plik xcdatamodeld.
  3. Wybierz klasę, która powoduje problemy.
  4. Kliknij "Edytor" na Xcode.
  5. Kliknij "Utwórz podklasę NSManagedObject", odtworzy klasę za Ciebie.
5

Mój problem był ja przedstawieniu NSBundle.mainBundle() z testów jednostkowych podczas Musiałem użyć:

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

To był mój problem, dziękuję za odpowiedź! –

0

Nie musi sprawdzić zarówno cele dla kontrolera widoku. Musisz włączyć tylko cel projektu dla kontrolera widoku. Musisz zaimportować moduł klasy w pliku testowym, np. @testable, importując nazwę myprojectname, zamiast włączyć oba cele.

1

Może się to zdarzyć, jeśli klasa jest członkiem dwóch celów (może dwóch frameworków?) - a twoja aplikacja odwołuje się do jednego frameworka, podczas gdy cel testu jednostkowego odwołuje się do drugiego celu.

Więc jeden z zestawionych artefaktów posiada w pełni wykwalifikowaną typ Framework1.MyClass podczas gdy drugi jest Framework2.MyClass - a oni różnych klas w czasie wykonywania, ponieważ mają różne przestrzenie nazw. (Chociaż obie klasy są kompilowane z tego samego pliku źródłowego Swift)

Powiązane problemy