2015-04-23 2 views
11

Я создал подкласс UICollectionViewController и назвал его LibraryCollectionViewController и пометил оба флажка для проекта и теста. Также это идентификатор раскадровки - LibraryCollectionViewController и устанавливает соответствующий класс в построителе интерфейса.Swift, не может набрасывать значение типа

Будучи новым для Swift и IOS Тестирование я пошел и попытался инстанцирует сказал вид контроллера внутри моего теста следующим образом:

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

И я получаю следующее сообщение об ошибке:

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

Итак, ясно, что это не кастинг, но поскольку я еще новичок в Swift, я не могу определить, вызвана ли сама ошибка:

  1. я сделал что-то неправильно при создании подкласса и я ссылки на другую (Ergo MyApp. [ВК] против MyAppTests. [VC])
  2. Отливка с помощью as! неверен
  3. Любой другая причина

Любая помощь была бы оценена, спасибо заранее.

Update 1: Когда я создавал контроллер представления, последний шаг показывает 2 флажков под Target заголовок, я включил оба из них, это может быть причиной?

+1

Определяли ли вы пользовательский класс в IB? (Кстати, я думаю, что это должно быть возвращено UIStoryboard (name: «Main», bundle: NSBundle.mainBundle().) – matthias

+0

В IB я установил класс (ниже заголовка «Пользовательский класс») в LibraryCollectionViewController. Я попробую комплект –

+0

@matthias Использование пакета дает такой же результат :( –

ответ

0

Попробуйте это:

  • Открыть LibraryCollectionViewController.swift
  • Нажмите Option + Команда + открыть File Inspector
  • Найти Цель членства раздел
  • Проверить MyApp
-1

У меня была такая же проблема. Вам необходимо:

  1. Удалите свой класс и его файл.
  2. Откройте файл xcdatamodeld.
  3. Выберите класс, вызывающий проблемы.
  4. Нажмите «Редактор» на Xcode.
  5. Нажмите «Создать подкласс NSManagedObject», он воссоздает для вас класс.
5

Моя проблема была я ссылки NSBundle.mainBundle() из модульных тестов, тогда как мне нужно использовать:

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

Это была моя проблема, спасибо за ответ! –

+0

Замечательно. Спасибо! – Macondo2Seattle

0

Вы не должны проверить как цели для контроллера представления. Вы должны включить только цель проекта для контроллера вида. Вы должны импортировать модуль класса в файл тестового примера, например, @testable импортировать myprojectname вместо включения обеих целей.

1

Это может произойти, если класс является членом двух целей (может быть, двух фреймворков?) - и ваше приложение каким-то образом ссылается на одну структуру, в то время как цель тестирования объекта ссылается на вторую цель.

Так один из скомпилированных артефактов имеет полностью квалифицированный тип Framework1.MyClass а другой Framework2.MyClass - и они во время выполнения различных классов, потому что они имеют разные пространства имен. (Хотя оба класса скомпилированы из одного и того же исходного файла Swift)

Смежные вопросы