无法更新单例类中的属性

时间:2014-02-11 11:51:09

标签: ios iphone objective-c singleton

我有一个单独的类,它已被声明为:

+(instancetype)mySharedClass
{
    static BBDataStore *sharedBBDataStore = nil;
    static dispatch_once_t onceToken;
    dispatch_once(&onceToken, ^{
        sharedBBDataStore = [[self alloc]initWithDataExpiry:DATA_EXPIRY_TIME];
    });
    return sharedBBDataStore;
}

-(instancetype)initWithDataExpiry: (int) dataExpiry
{
    if (self = [super initWithDataExpiry:dataExpiry])
        {

        self.categoryWebServicePool = [[NSMutableDictionary alloc]init];
        self.userProfileWebServicePool = [[NSMutableDictionary alloc]init];

        }
    return self;
}

在这个类中,我有一个声明为的公共属性:

@property (assign, nonatomic) int countryId;

现在当我从另一个类设置此属性时:

[[BBDataStore sharedDataStore]setCountryId:1];

我的自定义setter在单例类中运行:

-(void)setCountryId:(int)countryId
{
    switch (countryId)
    {
        case RE_INDEX:
            self.serverString = RE_SERVER_STRING;
            self.authId = BB_AUTH_SA_ID;

        break;
        case KE_INDEX:
           self.serverString = KE_SERVER_STRING;
           self.authId = BB_AUTH_KENYA_ID;

        break;
    }

}

然而,self.countryId始终保持为0并且永远不会更改其值。我在这里做错了什么?

3 个答案:

答案 0 :(得分:2)

您的自定义setter方法实际上并未更改基础ivar的值。这应该有用。

-(void)setCountryId:(int)countryId
{
    _countryId = countryId;
    switch (countryId)
    {
        case RE_INDEX:
            self.serverString = RE_SERVER_STRING;
            self.authId = BB_AUTH_SA_ID;

        break;
        case KE_INDEX:
           self.serverString = KE_SERVER_STRING;
           self.authId = BB_AUTH_KENYA_ID;

        break;
    }
}

答案 1 :(得分:1)

问题在于这一行:

[[BBDataStore sharedDataStore]setCountryId:1];

你应该使用:

[[BBDataStore mySharedClass] setCountryId:1];

您永远不会直接访问单件对象

此外,您未在自定义设置器中设置countryId属性。

答案 2 :(得分:1)

您需要更新countryId。在setter中调用_countryId = countryId应该可以解决问题