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的主要内容,如果未能解决你的问题,请参考以下文章
将值传递给模态 UIViewController - Swift