繁体   English   中英

单例未在Objective-C中显示参数化方法

[英]Singleton not showing parametrized methods in Objective-C

我像本教程一样实现了一个单例

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";

请帮忙!

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

@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编程语言基础的好教程。 现在学习基础知识将为您节省大量时间。

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

试用:

[sharedManager methodICantSee:@"MyName"];

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

嗯,这是因为sharedManager的类型为id ,它的字面意思是任何对象。

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

例如

+ (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"];

祝您事业顺利,希望我能为您提供帮助。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM