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)
[sharedInstance getPref]
Run Code Online (Sandbox Code Playgroud)
非静态方法是实例方法.接收者必须是一个实例.在您的情况下,您要使用的实例当然是您刚刚创建的sharedInstance.
在一个类方法中,self是类本身.这就是你在那一行得到错误的原因,因为self不是那个上下文中的实例.
| 归档时间: |
|
| 查看次数: |
656 次 |
| 最近记录: |