我正在一个大型现有的 Objective-C 代码库中工作,目前正在编写单元测试。该项目广泛使用实例变量。
我写了一个小方法来获取 ivar。它在同一个项目的另一个单元测试中工作,但在这种情况下不工作。
代码:
-(id)getObjectForIvarNamed:(NSString *)ivarNameString
{
const char *ivarName = [ivarNameString UTF8String];
Ivar ivarValue = class_getInstanceVariable([textFieldOverlay class], ivarName);
id objectAtIvar = object_getIvar(textFieldOverlay, ivarValue);
return objectAtIvar;
}
编译器在 Ivar ivarValue 开头的行报错并出现以下错误:
“'Ivar' 的声明必须在需要之前从模块'ObjectiveC.runtime' 导入”
网络搜索此错误代码的结果为零。不确定为什么它在另一个文件中工作,标题在两个 XCUnitTest 类之间看起来都一样。
最佳答案
永不失败,输入问题后立即找到答案。 但是,我还没有发布。因为这个错误在网络搜索中是不可能找到的,所以我想我应该把它贴出来,所以那里有一个实例。我在工作测试类中测试的项目类导入了 objective-c 运行时 header ,我想在输入问题后检查被测试的类。我认为这是一个标题问题,但在导入的类中没有看到它。学习时刻。
要导入 objective-c 运行时 header 并消除此警告,请添加 #import <objc/runtime.h>到标题。完成,完成。
关于iOS Xcode : Compiler error accessing Ivar in Objective-C,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28774733/