2015-04-23 38 views
11

類型的值我創建了UICollectionViewController的一個子類,並將其稱爲LibraryCollectionViewController,並標記了項目和測試的兩個複選框。它的故事板ID是LibraryCollectionViewController,並在界面構建器上設置其相應的類。斯威夫特,不能投型

作爲新雨燕的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. 我創建的子類,我引用一個不同的時候做了一些錯誤的(人機工程學的MyApp的。[VC] VS MyAppTests。[VC])
  2. 使用as!鑄造是不正確
  3. 任何其他原因

任何幫助將不勝感激,在此先感謝。

更新1:當我創建視圖控制器,最後一步示出了目標標題下2個複選框,我啓用兩者,會是原因?

+1

您是否在IB中定義了自定義類? (順便說一句,我認爲這應該是返回UIStoryboard(名稱:「主」,捆綁:NSBundle.mainBundle()。) – matthias

+0

在IB我設置類(下面的「自定義類」標題)LibraryCollectionViewController。 –

+0

@matthias使用包給出了相同的結果:( –

回答

0

試試這個:

  • 打開LibraryCollectionViewController.swift
  • 選項 + 命令 + 打開文件檢查器
  • 查找目標會員部分
  • 檢查MyApp
-1

我有同樣的問題。您需要:

  1. 刪除您的班級及其檔案。
  2. 打開你的xcdatamodeld文件。
  3. 選擇導致問題的類。
  4. 點擊Xcode上的「編輯器」。
  5. 點擊「創建NSManagedObject子類」,它會爲你重新創建類。
5

我的問題是,我引用從單元測試NSBundle.mainBundle(),而我需要使用:

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

這是我的問題,謝謝你的答案! –

0

你不能爲視圖控制器同時檢查目標。您必須僅啓用視圖控制器的項目目標。您必須在測試用例文件中導入類模塊,如@testable import myprojectname,而不是啓用兩個目標。

1

如果一個類是目標的成員可能發生這種情況(也許兩個框架?) - 與您的應用程序以某種方式引用一個框架,同時在單元測試目標被引用的第二個目標。

所以編譯文物中的一個具有完全限定型Framework1.MyClass而另一種是Framework2.MyClass - 他們是在運行時不同類別因爲他們有不同的命名空間。 (儘管這兩個類都是從相同的Swift源文件編譯的)