在cocoa中键入cast以获取修复警告

时间:2010-12-24 14:01:52

标签: objective-c cocoa casting

我有下一个情况:

方法:

-(void) myMethod:(id)inValue
{
     long a = [inValue longValue];
}

编译器向我显示一个警告:longValue - 乘以:

multiple methods named '-longValue' found

如果没有更改方法名称,我该怎么办才能解决此警告?

感谢!

2 个答案:

答案 0 :(得分:3)

强烈键入方法的参数,告诉编译器要使用的-longValue消息的哪个变体,例如:

-(void) myMethod:(NSNumber *)inValue
{
     long a = [inValue longValue];
}

如果您想接受多个回复-longValue的类型(例如NSNumberNSString),那么您必须回到使用id和您我会看到警告。你看,你的(是的,你的,而不是Apple的)类层次结构中的某些东西已经聚集并为-longValue使用了不同的签名,因此编译器无法知道你想要使用哪一个。 id告诉它“这是一个对象”,但它没有提供编译器可以用来解决其难题的明确信息。

为什么你传递id而不是强类型对象有特殊原因?

答案 1 :(得分:0)

我从这个警告中了解到 - 完全正确。如果我是编译器开发人员 - 我可以做到这样的事情:

id a = [[[inValue class] alloc]] init];

用于类型转换;之后可能是:

a = inValue

[a longValue]; 

解决此警告。

但我不是。) 我只是在学习Mac编程。所以我只是问 - 它可能与否。