Ios Swift,无法转换类型的值
我创建了Ios Swift,无法转换类型的值,ios,swift,Ios,Swift,我创建了UICollectionViewController的子类,并将其命名为LibraryCollectionViewController,并标记了项目和测试的两个复选框。它的故事板id也是LibraryCollectionViewController,并在interface builder上设置相应的类 作为Swift和iOS测试的新手,我尝试在我的测试用例中实例化所述视图控制器,如下所示: let storyboard = UIStoryboard(name: "Main", bundl
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新手,我发现自己无法确定错误本身是否是由以下原因造成的:
as代码>不正确
- 打开
LibraryCollectionViewController.swift
- 按Option+Command+1打开文件检查器
- 查找目标成员部分
- 检查MyApp的
- 删除您的类及其文件
- 打开xcdatamodeld文件
- 选择导致问题的类
- 单击Xcode上的“编辑器”
- 单击“创建NSManagedObject子类”,它将为您重新创建该类
- 我也有同样的问题。您需要:
我的问题是我从单元测试中引用了
NSBundle.mainBundle()
,而我需要使用:
let bundle = Bundle(for: self.classForCoder)
不能同时检查视图控制器的两个目标。必须仅为视图控制器启用项目目标。您必须在测试用例文件中导入类模块,如@testable import myprojectname,而不是同时启用两个目标。如果一个类是两个目标(可能是两个框架?)的成员,并且您的应用程序以某种方式引用一个框架,而单元测试目标引用第二个目标,则可能会发生这种情况
因此,其中一个编译的人工制品具有完全限定的类型
Framework1.MyClass
,而另一个是Framework2.MyClass
——它们在运行时是不同的类,因为它们具有不同的名称空间。(即使这两个类都是从同一个Swift源文件编译而来)我遇到了同样的问题,因为我使用的是导航控制器
试试这个:
我希望它能工作您在IB中定义自定义类了吗?(顺便说一句,我认为应该是返回UIStoryboard(名称:“Main”,bundle:NSBundle.mainBundle())在IB中,我将类(在“Custom Class”标题下)设置为LibraryCollectionViewControllerbundle@matthias使用bundle得到了相同的结果:(我认为原因是您同时启用了这两个功能(可能).MyAppTests尝试禁用此功能可能这有助于UIStoryboard(名称:“Main”,bundle:NSBundle(forClass:self.dynamicType))这是一个很好的逻辑解释,但也有解决方案来解决这个问题,因为我有这个确切的问题。当然。你需要考虑类需要包含在哪个目标中,以及哪些目标依赖于其他目标。例如:你的应用目标和单元测试目标中都包含一个swift文件。这将导致但该代码已经可用于单元测试目标,因为它依赖于应用程序目标,所以您可以将其从单元测试目标中删除。