我有一个单独的类,它已被声明为:
+(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并且永远不会更改其值。我在这里做错了什么?
答案 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
应该可以解决问题