在我的实现模型中,我需要有一些不同的文件,有一些类似的方法。另外,我在NSMutableArray
中收集不同类型的对象,并尝试调用我的类似方法:
[[ArrayOfViews objectAtIndex:i] myMethodWithInt:'number' andExample:'char'];
但它给了我一个警告:
Instance method '...' not found (return type defaults to 'id')
我的代码有效,但是我应该修复此警告吗?
答案 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
语句。