Singleton没有在Objective-C中显示参数化方法

时间:2014-03-15 02:34:34

标签: ios objective-c

我实现了像本教程

这样的单例exaclty

http://www.galloway.me.uk/tutorials/singleton-classes/

当我使用它时,它可以很好地显示我的属性,但方法我只能看到那些带有参数的方法。

@interface MyManager : NSObject {
    NSString *someProperty;
}

@property (nonatomic, retain) NSString *someProperty;
+(void) methodOK;
+(void)methodiCantSee:(NSString *)name;
+ (id)sharedManager;

@end

我可以这样做

MyManager *sharedManager = [MyManager sharedManager];
sharedManager.methodOk

但我不能这样做

MyManager *sharedManager = [MyManager sharedManager];
sharedManager.methodICantSee:@"MyName";

Plase help!

3 个答案:

答案 0 :(得分:2)

您将所有方法都设为类方法。使它们成为实例方法。

@interface MyManager : NSObject {
    NSString *someProperty;
}

@property (nonatomic, retain) NSString *someProperty;
- (void) methodOK;
- (void)methodiCantSee:(NSString *)name;

+ (id)sharedManager;

@end

请学习调用方法的正确语法:

[sharedManager methodOk];

[sharedManager methodCantSee:@"some string"];

鉴于这些错误,我建议你找一个关于Objective-C编程语言基础知识的好教程。现在学习基础知识将为您节省大量时间。

答案 1 :(得分:1)

要调用任何具有参数的方法,您必须在Objective-C中使用Objective-C语法。

试试:

[sharedManager methodICantSee:@"MyName"];

对于不带参数且具有非void返回类型的方法,允许使用点语法。

答案 2 :(得分:1)

啊,因为sharedManager属于id类型,字面意思是任何对象。

如果您想更具体一点,请使用instancetype,然后您可以调用点语法,如您在示例中演示的那样。

e.g。

+ (instancetype)sharedManager;

但正如@rmaddy所说,如果你打电话给你的方法你应该使用方括号。

修改

你的方法:

+(void) methodOK;
+(void)methodiCantSee:(NSString *)name;

被定义为类方法,这意味着它们可以通过类访问而没有任何状态,这可以通过以下方式完成:

[MyManager methodOK];
[MyManager methodiCantSee:@"some_string"];

如果你想要单例对象上的实例方法(如果你想与对象的某个状态交互),你必须用-定义方法并通过类的实例访问它。这可以这样做:

-(void)methodOK;
-(void)methodiCantSee:(NSString *)name;


MyManager *sharedManager = [MyManager sharedManager];
[sharedManager methodOk];
[sharedManager methodiCantSee:@"some_string"];

祝你好运,希望我能帮助你。