2013-05-05 105 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