实例方法未找到警告,但正在工作

时间:2013-07-09 19:41:44

标签: objective-c methods nsmutablearray warnings

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

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

但它给了我一个警告:

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

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

4 个答案:

答案 0 :(得分:3)

您应该介绍类型:

MONType * obj = [ArrayOfViews objectAtIndex:i];

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

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

出于多种原因,它可能会抱怨。引入该类型将修复这些类别的问题,或者至少为您提供更有用的警告。具体来说,编译器没有看到实例方法-myMethodWithInt:andExample: 的声明。

您可能要么未导入标头,要么声明方法以便在翻译中显示。

  

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

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

答案 1 :(得分:0)

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

答案 2 :(得分:0)

在您的objectAtIndex调用中添加类型转换,并删除警告。这不是一个大问题,但是从NSArray强制回归是一种很好的做法。

基本上:

YourObjectType *yourObject = (YourObjectType*)[ArrayOfViews objectAtIndex:i];
[yourObject myMethodWithInt:'number' andExample:'char'];

答案 3 :(得分:0)

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