Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/119.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios Swift,无法转换类型的值_Ios_Swift - Fatal编程技术网

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上设置相应的类

作为SwiftiOS测试的新手,我尝试在我的测试用例中实例化所述视图控制器,如下所示:

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新手,我发现自己无法确定错误本身是否是由以下原因造成的:

  • 我在创建子类时出错,并且引用了另一个子类(因此MyApp。[vc]与MyAppTests。[vc])
  • 使用
    as不正确
  • 还有其他原因吗
  • 任何帮助都将不胜感激,提前谢谢

    更新1:当我创建视图控制器时,最后一步在目标标题下显示了两个复选框,我同时启用了这两个复选框,这可能是原因吗?

    尝试以下操作:

    • 打开
      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文件。这将导致但该代码已经可用于单元测试目标,因为它依赖于应用程序目标,所以您可以将其从单元测试目标中删除。