为什么我不能称这种方法?

时间:2012-02-09 16:42:27

标签: iphone objective-c ios ipad

我在这里有一个方法签名:

.h

-(void)addToArray

我想在这里使用它:

.m 

-(void)viewDidLoad{
NSMutableArray *array = [[NSMutableArray alloc]init];
[array addToArray];
}

-(void)addToArray{
//some code here…
}

问题在于我做[array addToArray];它返回给我一条消息,说“未找到实例方法'-addToArray'(返回类型默认为'id')” 我该如何解决?

4 个答案:

答案 0 :(得分:3)

当你执行[array somemethod] ..时,将在该数组数据类型类中找到该方法(即NSMutableArray类。

当你在自己的班级中有一个方法时,它不是一个类别......那么你必须调用

[self somemethod]

这样它会查看你调用方法的类。

答案 1 :(得分:3)

更改为:

·H

-(void)addObjectsToArray:(NSMutableArray*)a;

的.m

- (void)viewDidLoad {
     NSMutableArray * array = [[NSMutableArray alloc]init];
     [self addObjectsToArray:array];
}
- (void)addObjectsToArray:(NSMutableArray*)a {
     //some code here…
     [a addObject:[NSString stringWithFormat:@"Example String Object"]]; // example way to add objects to the array
}

答案 2 :(得分:3)

Shubhank的答案确实是正确的,但是如果你想完成你最初描述的内容,那就是让NSMutableArray实例响应你的方法,你可以通过使用类别来实现。 https://developer.apple.com/library/ios/#documentation/cocoa/conceptual/objectivec/chapters/occategories.html

此博客详细说明了向NSArray和/或NSMutableArray添加类别。 http://it.toolbox.com/blogs/macsploitation/extending-classes-in-objectivec-with-categories-27447

答案 3 :(得分:-1)

在你的m文件中,尝试这样做:#import“无论它是什么叫。”如果你还没有。如果您提供更多代码,我可以提供更多帮助,但我希望这会有所帮助。