2014-02-11 24 views
0

更新財產我有一個已被宣佈像這樣一個單例類:無法在單例類

+(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,並且永遠不會更改其值。我在這裏做錯了什麼?

回答

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; 
    } 
} 
+0

解決了這個問題。非常感謝。我只是假定製定者設置了財產。沒有知道我必須直接設置伊娃。糟糕! – Tander

+0

不用擔心。另外,您可以對感興趣的屬性使用關鍵值觀察(KVO),以便您不必處理該問題(或在setter中使用副作用)。 – FluffulousChimp

+0

這款iOS遊戲仍然新鮮出爐。因此,請閱讀KVO,看看它是否適合這個問題。 – Tander

1

問題是這一行:

[[BBDataStore sharedDataStore]setCountryId:1]; 

你應該使用這樣:

[[BBDataStore mySharedClass] setCountryId:1]; 

你從來沒有直接訪問單項對象

你也沒有設置countryId財產你的自定義setter。

1

您需要更新countryId。在調用中調用_countryId = countryId應該訣竅

+0

這工作。不能相信我真的錯過了。對iOS開發來說仍然是新的。謝謝 – Tander