2013-05-05 102 views
-1

我是Objective-C的初學者。我想從文件me.m中調用文件you.m中的方法two。你能教我用下面的簡單例子來理解。謝謝!從另一個文件調用方法

you.h

#import <Foundation/Foundation.h> 
@interface you : NSObject { 
} 
- (NSString *)one; 
- (NSString *)two; 
@end 

you.m

#import "you.m" 

@implementation you 
- (NSString *)one { 
    NSString *a = @"this is a test."; 
    return a; 
} 
-(NSString *)two { 
    NSString *b = [self one]; 
    return b; 
} 
@end 

me.h

#import <Foundation/Foundation.h> 
@interface me : NSObject { 
} 
@end 

me.m

#import "you.h" 
#import "me.h" 

@implementation me 
-(void)awakeFromNib{ 
    //NSString *obj = [[[NSString alloc] init] autorelease]; 
    //NSString *str = [obj two]; // dont work 
    //NSString *str = [self two]; // dont work 
    // I'd like to call method *two* from here. 
    NSLog(@"%@", str); 
} 
@end 

回答

3

me類,建立you一個實例。

you *objectYou=[you new]; 

由於two返回一個字符串,你需要將它存儲:

NSString *string=[objectYou two]; 

在您的代碼:

-(void)awakeFromNib{ 
    you *objectYou=[you new]; 
    NSString *str = [objectYou two]; 
    NSLog(@"%@", str); 
} 

注:按照命名規則。類名必須以大寫字母開頭,如Me

編輯:

當你正在學習,我想補充一點,因爲你是從調用twoone。如果one不意味着被稱爲you類之外。您可以在.m中定義它,並從.h中刪除聲明。

+0

啊,我知道了。非常感謝你! – 2013-05-05 03:20:19

3

很簡單,在Me類中創建一個You類的實例並調用該成員函數。像這樣 -

you *youInstance = [[you alloc] init]; 
NSString *retStr = [youInstance two]; 

順便說一句,它是一個很好的做法,CamelCase類名。

還要注意這一點 -

@interface you 
- (NSString *) twoInstanceMethod; 
+ (NSString *) twoClassMethod; 
@end 

NSString *retStr = [you twoClassMethod]; // This is ok 

NSString *retStr = [you twoInstanceMethod]; // this doenst't work, you need an instance: 

//so we create instance. 
you *youInstance = [[you alloc] init]; 
NSString *retStr = [youInstance two]; 

希望這將清除一些概念...

+0

怎麼樣從兩個返回字符串? – 2013-05-05 03:10:49

+0

,我把它留給@Dede來填補空白。但爲了完整起見,我會編輯我的答案。 – 2013-05-05 03:11:53

+1

不錯的答案喜歡它:) – 2013-05-05 03:13:43