我有下一个情况:
方法:
-(void) myMethod:(id)inValue
{
long a = [inValue longValue];
}
编译器向我显示一个警告:longValue - 乘以:
multiple methods named '-longValue' found
如果没有更改方法名称,我该怎么办才能解决此警告?
感谢!
答案 0 :(得分:3)
强烈键入方法的参数,告诉编译器要使用的-longValue
消息的哪个变体,例如:
-(void) myMethod:(NSNumber *)inValue
{
long a = [inValue longValue];
}
如果您想接受多个回复-longValue
的类型(例如NSNumber
和NSString
),那么您必须回到使用id
和您我会看到警告。你看,你的(是的,你的,而不是Apple的)类层次结构中的某些东西已经聚集并为-longValue
使用了不同的签名,因此编译器无法知道你想要使用哪一个。 id
告诉它“这是一个对象”,但它没有提供编译器可以用来解决其难题的明确信息。
为什么你传递id
而不是强类型对象有特殊原因?
答案 1 :(得分:0)
我从这个警告中了解到 - 完全正确。如果我是编译器开发人员 - 我可以做到这样的事情:
id a = [[[inValue class] alloc]] init];
用于类型转换;之后可能是:
a = inValue
[a longValue];
解决此警告。
但我不是。) 我只是在学习Mac编程。所以我只是问 - 它可能与否。