0

有没有办法抑制编译错误?在这种情况下我不能使用协议,因为我尝试使用的类在外部库中。我无法控制代码

if (myClass && [[myClass class] respondsToSelector:@selector(getSomething)])
{
   // Compile error on the line below
   MyResult *result = [myClass getSomething];

   // Also tried
   MyResult *result = [(id)myClass getSomething];

}

编辑: 错误:选择器没有已知的类方法

4

2 回答 2

1

当您在无类型的 Objective-C 对象上使用方法时,编译器会尝试根据其选择器猜测您尝试调用的方法,因为它需要根据返回值生成不同的代码。生成代码的方式也不同,具体取决于您是否使用 ARC,编译器需要相应更改。

如果没有 ARC,编译器将假定返回类型id  适用于它不知道的任何选择器,并将生成警告。使用 ARC,它变成了一个硬错误,因为编译器不想冒险进行内存管理。

这就是为什么您至少需要告诉编译器该方法的一个现有声明。

于 2013-01-15T17:28:43.140 回答
0

This article describes how to use a #pragma declaration to avoid compiler warnings for cases where you are certain the warning is a false positive (or one that you believe is safe to ignore): NSHipster - #pragma

于 2013-01-15T17:35:04.780 回答