传递参数使得指针来自整数而没有强制转换

时间:2011-03-22 03:47:02

标签: iphone objective-c ios

我写了一个看起来像这样的函数:

- (void)changeText:(NSUInteger)arrayIndex;

我们只是说这是Label类中的一个方法。假设我有一个Label对象数组。我把这个函数称为:

[[labels objectAtIndex:0] changeText:1];

或者像这样:

NSUInteger index = 1;
[[labels objectAtIndex:0] changeText:index];

为什么它会给我警告:Passing argument 1 of 'changeText:' makes pointer from integer without a cast?代码执行得很好。

*的 修改 *

以这些方式调用函数不会发出警告:

[[labels objectAtIndex:0] changeText:0]; //arrayIndex is 0

Label *object = [labels objectAtIndex:0];
[object changeText:1];

2 个答案:

答案 0 :(得分:5)

更有可能的是,你不是#import包含changeText:定义的头文件到任何调用它的.m文件中,因此,编译器没有看过方法声明,不知道论证应该是什么。

或者您定义了changeText:方法, 将对象引用作为参数,编译器在编译调用站点之前就会看到它。

答案 1 :(得分:2)

不知何故,它认为changeText:将指针作为参数。可能是因为objectAtIndex:返回一个NSObject,而Objective-C不知道哪个类的签名适用于它。

为什么不将objectAtIndex:的结果分配给Label *,然后将changeText:应用到它?

像这样: Label * label =(Label *)[labels objectAtIndex:0]; [label changeText:1];