2

在我的实现模型中,我需要一些不同的文件,以及一些类似的方法。另外,我在 a 中收集不同类型的对象NSMutableArray,并尝试像这样调用我的类似方法:

[[ArrayOfViews objectAtIndex:i] myMethodWithInt:'number' andExample:'char'];

但它给了我一个警告:

Instance method '...' not found (return type defaults to 'id')

我的代码有效,但我应该修复这个警告吗?

4

4 回答 4

3

您应该介绍类型:

MONType * obj = [ArrayOfViews objectAtIndex:i];

然后使用类型化变量调用该方法:

[obj myMethodWithInt:<#number#> andExample:<#char#>];

它可能出于多种原因而抱怨。引入该类型将解决这些类别的问题,或者至少给您一个更有用的警告。具体来说,编译器看不到实例方法的声明-myMethodWithInt:andExample:

您可能没有导入标头,或者声明了方法以便它在翻译中可见。

我的代码有效,但我是否必须修复此警告?

也许。有时它会“工作”。这相当于 C89 缺少函数原型,由于它们引起的所有问题而被逐步淘汰。因此,如果参数和返回类型兼容(包括子类),则隐式参数和返回类型可以工作。但如果它不匹配,那么您应该期待未定义的行为。您可以通过在程序中使用适当的导入和声明以及通过引入如上所示的类型来避免所有这些并引入有意义的类型检查。这很有用,因为编译器会在您工作和代码库发展时避免出现大量愚蠢的错误。idNSObject

于 2013-07-09T21:39:28.593 回答
0

这可能只是在调用之前没有声明方法的情况。尝试将方法声明添加到类的接口部分。

于 2013-07-09T19:46:43.410 回答
0

您需要为#import声明您要调用的方法的标头添加一条语句。

于 2013-07-09T21:15:47.437 回答
0

向您的 objectAtIndex 调用添加类型转换以消除警告。这不是一个大问题,但是从 NSArray 中对返回进行类型转换是一种很好的做法。

基本上:

YourObjectType *yourObject = (YourObjectType*)[ArrayOfViews objectAtIndex:i];
[yourObject myMethodWithInt:'number' andExample:'char'];
于 2013-07-09T19:48:32.703 回答