2010-03-22 59 views
2

我有我知道什么是一个简单的问题,但在书籍和互联网上的许多搜索后,我似乎无法拿出一个解决方案。我有一个标准的iPhone项目,其中包含一个ViewController。我的应用程序在这一点上工作得很好。的Objective-C:如何访问其他类中的方法

我现在想创建一个通用类(延长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”方法。在我的视图控制器的.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及其属性和方法。

我很难过!请帮忙。

回答

5

你或许应该看一看许多目标C教程之一,但直接回答你的问题是,你还没有分配和初始化你的对象的实例。代码应该如下所示:

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

谢谢。我知道这是一个简单的问题,但出于某种原因,我认为@synthesize也会为我执行init。显然它没有。这解决了我的问题。再次感谢。 – Adam 2010-03-22 14:04:41

3

你只需要创建实际的对象。

你的实现只定义一个指针Util对象,但它仍指向nil

utils = [[Util alloc] init]; 

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

[Util myMethod]; 
+0

感谢您对此的回复。这解决了我遇到的问题。 – Adam 2010-03-22 14:05:12

相关问题