我实现了像本教程
这样的单例exacltyhttp://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!
答案 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"];
祝你好运,希望我能帮助你。