Objective-C:如何访问其他类中的方法

时间:2010-03-22 13:48:41

标签: objective-c

我知道的是一个简单的问题,但经过书籍和互联网上的多次搜索后,我似乎无法想出一个解决方案。我有一个标准的iPhone项目,其中包含一个ViewController。我的应用程序在这一点上运行得很好。

我现在想要创建一个具有一些基本实用方法的泛型类(扩展NSObject)。我们将这个类称为Util.m(以及相关的.h文件)。

我在项目中创建了Util类(和.h文件),现在我想从ViewController访问该类中包含的方法。

以下是Util.h的简单版本的示例

#import <Foundation/Foundation.h>

@interface Util : NSObject {

}

- (void)myMethod;

@end

然后Util.m文件看起来像这样:

#import "Util.h"

@implementation Util

- (void)myMethod {
    NSLog(@"myMethod Called");
}

@end

既然创建了我的Util类,我想从我的ViewController调用“myMethod”方法。在我的ViewController的.h文件中,我执行以下操作:

#import "Util.h"

@interface MyViewController : UIViewController {

    Util *utils;

}

@property (assign) Util *utils;

@end

最后,在ViewController.m中,我执行以下操作:

#import "Util.h"

@implementation MyViewController

@synthesize utils;

- (void)viewDidLoad {
    [super viewDidLoad];

    utils.myMethod;  //this doesn't work
    [utils myMethod]; //this doesn't work either
    NSLog(@"utils = %@", utils);  //in the console, this prints "utils = (null)"
}

我做错了什么?我想不仅能够直接引用像这样的简单util类中的其他类/方法,而且我还想直接引用其他ViewControllers及其属性和方法。

我很难过!请帮助。

2 个答案:

答案 0 :(得分:5)

您应该查看许多Objective C教程中的一个,但直接回答您的问题是您没有分配和初始化对象的实例。代码应如下所示:

utils = [[Utils alloc] init];
[utils myMethod];

答案 1 :(得分:3)

您只需要创建实际对象。

您的实现仅定义指向Util对象的指针,但仍指向nil

utils = [[Util alloc] init];

另一种方法是通过在方法前缀中用-替换+来创建静态方法。

[Util myMethod];