我有一个方法someMethod
。此方法在某些时候具有以下if-else条件。
- (void) someMethod {
// ... some more code ...
if ([userArray[0] isKindOfClass:[Me class]]) {
// some code
}
else {
// some other code
}
}
现在,当我正常执行代码时,总会遇到这个if条件。但是当我从我的一个测试用例中调用它时,else-part会被执行。我正在以完全相同的方式调用此方法(它没有副作用等)。
当我在正常运行和测试运行中调试东西时。我看到了不同的东西。
在Test中运行时,userArray有一个对象(Me_Me_2 *)0x00007fa61d39dbf0
。
在正常运行时,userArray具有相同的对象,但有一个区别。它说(Me_Me_ *)0x00007fce71459ae0
。
当我打印NSStringFromClass([userArray[0] class])
的值时,它们都会打印“我”。
“我”是一个NSManagedObject。
另一件有趣的事情是,如果我在调试器中添加一个表达式并对其进行评估,它总是求值为true - ([((NSObject*)userArray[0]) isKindOfClass:[Me class]])
返回(bool)true
。这完全是奇怪的!如果条件为真,为什么它会进入else块?
现在有些问题 -
这里发生了什么?在测试中运行时,Core Data对象是否被视为不同?
为什么测试时对象的类型为“Me_Me_2”,否则为“Me_Me_”?为什么不只是“我”?
答案 0 :(得分:1)
这听起来类似于以下问题:isKindOfClass doesn't work as expected
简而言之,被比较的类是测试目标的目标成员吗?它应该只是应用程序的目标成员。