Objective C – 从另一个类中调用方法

我有2个类geoViewControllergeoMainViewController

我在geoMainViewController有一个名为getFoo

它看起来像这样:

 - (NSString *)getFoo { NSString* foo = @"This is foo"; return foo; } 

我想从geoViewController类调用getFoo

我在我的geoViewController m文件中有#import "geoMainViewController.h"

我想实例化geoMainViewController类,并从我的geoViewController类中的viewDidLoad像这样调用getFoo方法:

 - (void)viewDidLoad { [super viewDidLoad]; geoMainViewController* mainVC = [[geoMainViewController alloc] init]; NSString* myFoo = [mainVC getFoo]; } 

它似乎是实例geoMainViewController类罚款,但我得到NSString* myFoo = [mainVC getFoo];错误NSString* myFoo = [mainVC getFoo];

错误是 – “geoMainViewController”没有可见的@interface声明select器“getFoo”

我相信我错过了一个步骤,因为我对Objective C非常陌生。我只是不确定我做错了什么。

任何帮助,这将是伟大的。

谢谢!

在你的geoMainViewController.h你应该声明select器是可见的:

 -(NSString *)getFoo; 

你把- (NSString *)getFoo在你的geoMainViewController.h ? 您必须通过.h文件使这些方法在对象的外部可见,以便其他对象知道它们响应哪个select器。 autoComplete是否填充每个机会的消息?

 #import <Foundation/Foundation.h> @interface { } @property (nonatomic,strong) ; @property (nonatomic,strong) ; @property (nonatomic, strong) ; - (NSString *)getFoo @end 

编辑:(你也可以让Foo一个属性的方式)

你在头文件中声明了吗?

头文件包含.h文件中的所有函数声明,并且只将.h文件包含在您的类中。 所以这取决于.h文件。 .h文件将具有作为.m文件的所有function。

希望它可以帮助你。

你误解了如何使用视图控制器。 虽然你可以在技术上创build一个视图控制器的实例来调用它的一个方法,但你不应该这样做。 通常的做法是视图控制器是视图层次结构的一部分,当有权访问该实例时,可以调用它。 你在这里失去了一些根本

你真正的错误是一个missinh方法声明,我会怀疑,但你有更大的问题要解决。