Objective C - 来自另一个类的Call方法

时间:2013-02-27 07:39:21

标签: ios objective-c

我有2个课程geoViewControllergeoMainViewController

我在geoMainViewController中有一个名为getFoo

的方法

看起来像这样:

- (NSString *)getFoo
{

NSString* foo = @"This is foo";

return foo;

}

我正在尝试从getFoo班级致电geoViewController

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

我正在尝试实例化geoMainViewController类并从getFoo类中的viewDidLoad调用geoViewController方法,如下所示:

- (void)viewDidLoad
{
    [super viewDidLoad];

    geoMainViewController* mainVC = [[geoMainViewController alloc] init];

    NSString* myFoo = [mainVC getFoo];    

}

它似乎正在实例化geoMainViewController类,但我在NSString* myFoo = [mainVC getFoo];上收到错误

错误是 - 对于' geoMainViewController'没有可见的@interface;声明选择器' getFoo'

我确信我错过了一步,因为我对目标C很新。我只是不确定我做错了什么。

对此的任何帮助都会很棒。

谢谢!

4 个答案:

答案 0 :(得分:5)

geoMainViewController.h中,您应该声明选择器可见:

-(NSString *)getFoo;

答案 1 :(得分:1)

您是否将- (NSString *)getFoo放入geoMainViewController.h? 您必须通过.h文件使这些方法对对象外部可见,因此其他对象知道它们响应哪些选择器。 autoComplete是否按机会填写了消息?

#import <Foundation/Foundation.h>

@interface 
{

}

@property (nonatomic,strong) ;
@property (nonatomic,strong) ;
@property (nonatomic, strong) ;

- (NSString *)getFoo
@end

编辑:(顺便说一句,你也可以让Foo成为一个属性)

答案 2 :(得分:1)

您是否在头文件中声明了它?

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

希望它对你有所帮助。

答案 3 :(得分:0)

您误解了如何使用视图控制器。虽然您可以在技术上创建视图控制器的实例以调用其中一个方法,但您不应该这样做。通常的方法是视图控制器是视图层次结构的一部分,当您有权访问该实例时,可以在其上调用方法。你在这里缺少一些基本的东西。

你的实际错误是一个missinh方法声明,我怀疑,但你有更大的问题需要先解决。