我创建了一个UICollectionViewController
的子类,并将其命名为LibraryCollectionViewController
,同时选中了项目和测试的复选框,它的故事板id为LibraryCollectionViewController
,并在interface builder中设置了相应的类。
作为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.我在创建子类时做错了一些事情,我引用了一个不同的子类(因此,MyApp.[vc] vs MyAppTests.[vc])
1.使用as!
的转换不正确
1.任何其他原因
任何帮助将不胜感激,提前感谢。
更新1:当我创建视图控制器时,最后一步在Target标题下显示了2个复选框,我启用了这两个复选框,这是否是原因?
6条答案
按热度按时间9bfwbjaz1#
我的问题是我从单元测试中引用了
NSBundle.mainBundle()
,而我需要用途:编辑:2022,在AppCode中使用SwiftPM,在我的
Package.swift
中使用一个resources
键5jvtdoz22#
如果一个类是 * 两个 * 目标(可能是两个框架?)的成员,并且您的应用以某种方式引用了一个框架,而单元测试目标引用了第二个目标,则会发生这种情况。
因此,其中一个编译后的工件具有完全限定的类型
Framework1.MyClass
,而另一个是Framework2.MyClass
--它们在运行时是 * 不同的类 *,因为它们具有不同的命名空间(即使这两个类都是从同一个Swift源文件编译的)。dgenwo3n3#
试试这个:
LibraryCollectionViewController.swift
MyApp
7uhlpewt4#
您不能同时选中视图控制器的两个目标。您必须只启用视图控制器的项目目标。您必须导入测试用例文件中的类模块,如@testable import myprojectname,而不是同时启用这两个目标。
r55awzrz5#
我有同样的问题,因为我正在使用导航控制器尝试这个:
1.删除嵌入式导航控制器
1.直接绑定这两个视图控制器
我希望能成功
ymdaylpp6#
我也遇到了同样的问题。您需要:
1.删除类及其文件。
1.打开xcdatamodeld文件。
1.选择导致问题的类。
1.点击Xcode上的“编辑器”。
1.单击“创建NSManagedObject子类”,它将为您重新创建该类。