我知道的是一个简单的问题,但经过书籍和互联网上的多次搜索后,我似乎无法想出一个解决方案。我有一个标准的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及其属性和方法。
我很难过!请帮助。
答案 0 :(得分:5)
您应该查看许多Objective C教程中的一个,但直接回答您的问题是您没有分配和初始化对象的实例。代码应如下所示:
utils = [[Utils alloc] init];
[utils myMethod];
答案 1 :(得分:3)
您只需要创建实际对象。
您的实现仅定义指向Util
对象的指针,但仍指向nil
。
utils = [[Util alloc] init];
另一种方法是通过在方法前缀中用-
替换+
来创建静态方法。
[Util myMethod];