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 中的错误接收器类型“无效”错误的主要内容,如果未能解决你的问题,请参考以下文章