如何在目标c中从静态方法调用非静态方法?

Tec*_*ain 0 oop iphone objective-c ipad ios

我正在使用一个类我使用单例模式.我有静态方法.现在我想在静态方法中调用一个非静态方法.但是我无法调用它.请告诉我解决方案是什么.

#import "ThemeManager.h"

@implementation ThemeManager

+(ThemeManager *)sharedInstance
{
    NSLog(@"shared instance called");
    static ThemeManager *sharedInstance = nil;

    if (sharedInstance == nil)
    {
        sharedInstance = [[ThemeManager alloc] init];
    }
    [self getPref];//i get error at this line
    return sharedInstance;
}
-(void)getPref
{
        NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
        NSString *themeName = [defaults objectForKey:@"theme"] ?: @"default";
        NSLog(@"theme name is %@",themeName);
        NSString *path = [[NSBundle mainBundle] pathForResource:themeName ofType:@"plist"];
        self.theme = [NSDictionary dictionaryWithContentsOfFile:path];



}
@end
Run Code Online (Sandbox Code Playgroud)

Giu*_*nza 6

[sharedInstance getPref]
Run Code Online (Sandbox Code Playgroud)

非静态方法是实例方法.接收者必须是一个实例.在您的情况下,您要使用的实例当然是您刚刚创建的sharedInstance.

在一个类方法中,self是类本身.这就是你在那一行得到错误的原因,因为self不是那个上下文中的实例.