从另一个控制器调用方法

时间:2014-02-18 21:52:40

标签: ios function call

我知道其他类似的问题已经被问到了,但是我已经通过了他们和他们的建议,而且根本无法让这个问题起作用。

我有一个带有关联h和m文件的视图控制器,这些文件访问另一个h和m文件(不是视图控制器)。

这个另一个被调用的文件需要在完成后调用它的父函数,但我不能让它在父文件中调用函数。

代码段:

ParentViewController.h:

#import <UIKit/UIKit.h>

@interface ParentViewController : UIViewController <UITextFieldDelegate> {
....
}

@end

ParentViewController.m:

#import "ParentViewController.h"
#import "OtherView.h"

@implementation ParentViewController

- (void)callThis {
    NSLog(@"this is not called");
}

@end

OtherView.h:

#import <UIKit/UIKit.h>

@interface OtherView : UIView {
...
}

@end

OtherView.m:

#import "OtherView.h"

@implementation OtherView

-(void)done {
    [self callThisFirst];
    [ParentViewController callThis];
}

-(void)callThisFirst {
    NSLog(@"This is called");
}

@end

任何人都可以帮助我在父文件中调用该方法吗?

由于

3 个答案:

答案 0 :(得分:1)

首先,你创建的方法是一个实例方法,因为它以-为前缀,但是你试图调用它,看起来你正试图调用类方法,因为你“我没有指定一个对象,而是指定了类名。

其次,在您的ParentViewController课程中,您没有在头文件中显示您声明的方法callThis,这意味着OtherView对该方法一无所知。您必须将以下行添加到ParentViewController.h中的@interface

- (void)callThis;

第三,您必须为您的#import类添加ParentViewController.h的OtherView到OtherView.m,以便了解ParentViewController类。

答案 1 :(得分:0)

所以在你的ParentViewController.h中你有:

...}

@end

也就是说,您没有声明要调用的方法。但是我们可以看到它是一个实例方法,因为实现说:

- (void)callThis { //...

但你试图把它称为类方法:

[ParentViewController callThis];

那不行。 ParentViewController没有+callThis方法,所以没有骰子。您需要将ParentViewController的实例传递给另一个对象,然后将其称为:

[theParentViewController callThis];

其中theParentViewController是指向实际ParentViewController对象的指针。您还需要将-callThis的声明添加到ParentViewController.h,即:

...}

-(void)callThis;

@end

答案 2 :(得分:0)

看起来你想在ParentViewController上使用callThis作为类方法而不是实例方法。

只需将-(void)callThis更改为+(void)callThis并将该签名复制到ParentViewController.h中的@interface声明中。

您还需要在OtherView.m中调用#import "ParentViewController.h"。您不需要在ParentViewController.h中#import "OtherView.h",因为您没有引用该类中的任何内容。