Swift 2.0:使用 Set 时无法将值 MyApp.MyCustomClass 转换为 MyAppTests.MyCustomClass

Posted

技术标签:

【中文标题】Swift 2.0:使用 Set 时无法将值 MyApp.MyCustomClass 转换为 MyAppTests.MyCustomClass【英文标题】:Swift 2.0: Could not cast value MyApp.MyCustomClass to MyAppTests.MyCustomClass when using Set 【发布时间】:2015-06-27 13:36:11 【问题描述】:

这是一个错误:

无法将 MyApp.Member (0x1674daf8) 类型的值转换为 MyAppTests.Member (0x4c07248)。

您可以轻松地重现错误:

    设置两个NSManagedObject

    @objc(Member)
    class Member: NSManagedObject 
        @NSManaged var family: Family
    
    
    @objc(Family)
    class Family: NSManagedObject 
        @NSManaged var members: Set<Member>
    
    

    也在你的.xcdatamodel中设置这个:

    然后在您的 TestFile 中:

    func testA() 
    
        let family = Family.MR_createEntityInContext(context)
        let father = Member.MR_createEntityInContext(context)
    
        father.family = family
    
        let firstMember = family.members.first
    
        XCTAssertEqual(firstMember!, father)
    
    

【问题讨论】:

我想这是 Swift 的Set 的问题。 您是否在测试模块中重新声明DBWorkingHours?它似乎找到了,但不是正确的。你导入你的应用模块了吗? 是的,在我的测试类上方我添加了两个:@testable import DirectBistro 和后来的import DirectBistro。没有帮助。 那我建议你把它报告为一个bug 嗨,Bartłomiej!能否请您发布错误报告的链接? 【参考方案1】:

我找到了解决办法:

我想那些有这样问题的人是这样将他们的文件导入到测试目标中的:

因为他们应该这样做:

所以,只需从您的测试目标中删除文件。然后,如果您需要测试目标中的文件,只需在 every 测试类中使用 @testable 关键字。

这样在目标之间转换值就没有问题了。它对我有用:-) 享受:-)

阅读更多来自Swift 2 + Xcode 7: Unit Testing Access Made Easy!!!!

【讨论】:

你成就了我的一天。非常感谢 我正在使用 swift 4 在 xcode 9.1 上尝试它,但它不起作用。知道如何解决这个问题吗? 非常感谢,我尝试了所有方法,并通过搜索“无法转换值”找到了这个……嗯!!! 请说明您所指的有关 Target Membership 的文件。如果我没有在 xcdatamodel 目标成员资格中包含测试目标,我将无法编译程序。 我想通了,我的测试又开始工作了。 Swift 与 Obj C 的不同之处在于您不会在测试目标中包含任何项目文件。没有任何。只需在测试中使用@testable import TARGET,您就可以访问所有内容。一旦我取消选中所有产品来源,测试就会恢复正常运行。

以上是关于Swift 2.0:使用 Set 时无法将值 MyApp.MyCustomClass 转换为 MyAppTests.MyCustomClass的主要内容,如果未能解决你的问题,请参考以下文章

Vb.NET 2.0 My.settings 无法正常工作

将值传递给模态 UIViewController - Swift

Swift 2.0 错误:警告:无法加载任何 Objective-C 类信息

使用 Swift 2.0 更新 UIButton 图像

如何在 swift 2.0 中使用 catch 概念

尝试从 Swift 2.0 中的 json 解析数据时出错?