XCode 5 中的错误接收器类型“无效”错误

Posted

技术标签:

【中文标题】XCode 5 中的错误接收器类型“无效”错误【英文标题】:Bad receiver type 'void' error in XCode 5 【发布时间】:2013-12-04 07:18:08 【问题描述】:

我在 Xcode 5 中收到“Bad receiver type 'void'”错误。我正在使用以下代码,

方法定义:

- (BOOL)allItemsSelectedFrom:(NSSet *)original selectedItems:(NSMutableArray *)selecteds

    NSLog(@"original = %@", original);

    for (id object in original)
        if([[object display] intValue]==1)
        if (![selecteds containsObject:[object name]])
            return NO;
    int k=0;
    for (id object in original)
    
        if([[object display] intValue]==1)
            k++;
    
    //if(k==[selecteds count] && ([selecteds count]!=0))
    if(k==[selecteds count])
        return YES;
    else
        return NO;

方法调用:

        BOOL allItemsSelected = [self allItemsSelectedFrom:profile.chemotherapies selectedItems:chemotherapies];

如何在 Xcode 5 中解决这个问题?

还有一件事,它在 Xcode 4.6.3 中工作正常,没有发生错误..

【问题讨论】:

似乎[object display]void 方法。 -(void)display;。然后它不会返回任何内容,因此您无法将其转换为integer 还需要类型转换来调用对象的方法。例如:YourClass *obj = (YourClass *)object; 然后通过[obj display] 调用display 方法; 【参考方案1】:

它与 xcode 没有任何关系。它与基本 sdk 标头有关 编译器不知道使用什么方法显示,因为有很多

从 ID 向您正在使用的对象添加转换,以便它使用正确的显示方法

【讨论】:

有 N 种方法,xcode 不知道该采用哪一种。如果您过度依赖 id,这是一个常见问题【参考方案2】:

编译器可以看到多个display 方法(请参阅[CALayer (void)display]),因为您使用的是id,所以它可以是其中任何一个。

不要在循环中使用id,而是使用实际的类:

for (YourClass *object in original)

这将为您提供更多类型检查,并为 Xcode 提供有关返回类型的提示。

【讨论】:

以上是关于XCode 5 中的错误接收器类型“无效”错误的主要内容,如果未能解决你的问题,请参考以下文章

错误:流“无效”中的类型代码无效

Xcode 5“无效的代码签名权利”错误

Xcode-5 验证错误。无效的代码签名权利

Mac OS X 终端错误:开发人员目录无效“/Applications/Xcode-5.1.1.app”

领域错误:无效值,期待 int 并接收:0

Swift - JSON 写入中的***类型无效