2010-03-22 63 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

相關問題