【问题标题】:iOS - customize class method in a singletoniOS - 在单例中自定义类方法
【发布时间】:2015-06-05 22:27:39
【问题描述】:

我正在自定义我的单例类 CLLocationManager。

我有

@property (nonatomic, strong) CLLocationManager *sManager;

和

static MyLocationManager* sMyLocationManager=nil;

+(instancetype)sharedLocationManager{
    static dispatch_once_t onceToken;
    dispatch_once(&onceToken, ^{
        sMyLocationManager = [[self alloc] init];

    });
    return sMyLocationManager;

}

我可以编写自己的方法

-(void)settingUserLocationManager{
    if(nil== sMyLocationManager.sManager){
        sMyLocationManager.sManager = [[CLLocationManager alloc] init];
}
-(void)onStartUpdatingUserLocation{
    [sMyLocationManager.sManager startUpdatingLocation];
    return;
}
-(void)onStopUpdatingUserLocation{
    [sMyLocationManager.sManager stopUpdatingLocation];
}

startUpdatingLocation 和 stopUpdatingLocation 是实例方法,这是我使用它们的方式,而 [CLLocationManager locationServicesEnabled] 是一个类方法。我不知道如何在我的单例类中使用它。

我尝试过使用它

+(BOOL)locationServicesEnabled {
    return [sMyLocationManager.sManager locationServicesEnabled];
}

但没有按预期工作。请添加一些想法。

【问题讨论】:

  • 您是否尝试为 sManager 分配一个值?我的意思是你有没有用任何方法初始化它?
  • 是的。我在我的视图控制器中这样做。

标签: ios objective-c iphone ios6


【解决方案1】:

由于您使用您的类包装 CLLocationManager,因此类方法遵循相同的技术。

您的类将包含一个方法,例如,

+ (BOOL)locationServicesEnabled
{
  return [CLLocationManager locationServicesEnabled];
}

【讨论】:

    【解决方案2】:

    使用

    +(BOOL)locationServicesEnabled {
        return [[sMyLocationManager sharedLocationManager] locationServicesEnabled];
    }
    

    【讨论】:

    • 添加显示编译时错误 - 'MyLocationManager 没有可见的@interface 声明选择器 sharedLocationManager'
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-04-12
    • 1970-01-01
    相关资源
    最近更新 更多