我写了一个看起来像这样的函数:
- (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];
答案 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];