2015-09-13 34 views
0

我只是試圖保存NSUserdefaults中的數組字典字典沒有成功。這裏是我的代碼:在NSDictionary中的NSArray存儲在NSUserDefaults

+ (BOOL) userHasAlreadyLoad:(NSNumber *)territoryId year:(NSInteger)year month:(NSInteger)month 
{ 
    NSMutableDictionary *dict = [[NSUserDefaults standardUserDefaults] objectForKey:USER_SETTING_MONTHS_LOADED]; 
    NSMutableDictionary *dictOfTerritory = dict[[territoryId stringValue]]; 
    if (dictOfTerritory == nil) 
     return NO; 

    NSMutableArray *yearData = dictOfTerritory[[@(year) stringValue]]; 
    if (yearData == nil) 
     return NO; 

    if ([yearData containsObject:@(month)]) 
     return YES; 
    return NO; 
} 

+ (void) setUserLoad:(NSNumber *)territoryId year:(NSInteger)year month:(NSInteger)month 
{ 
    NSMutableDictionary *dict = [[[NSUserDefaults standardUserDefaults] objectForKey:USER_SETTING_MONTHS_LOADED] mutableCopy]; 
    NSMutableDictionary *dictOfTerritory = [dict[[territoryId stringValue]] mutableCopy]; 
    if (dictOfTerritory == nil) 
    { 
     dictOfTerritory = [NSMutableDictionary dictionary]; 
     dict[[territoryId stringValue]] = dictOfTerritory; 
    } 
    NSMutableArray *yearData = [dictOfTerritory[[@(year) stringValue]] mutableCopy]; 
    if (yearData == nil) 
    { 
     yearData = [NSMutableArray array]; 
    } 
    if (![yearData containsObject:@(month)]) 
    { 
     [yearData addObject:@(month)]; 
    } 
    dictOfTerritory[[@(year) stringValue]] = yearData; 
    [[NSUserDefaults standardUserDefaults] setObject:dict forKey:USER_SETTING_MONTHS_LOADED]; 
    [[NSUserDefaults standardUserDefaults] synchronize]; 
} 

當我運行應用程序第一次,這樣可以節省正確的數據,這意味着yearData將包含一個一個月,但增加更多的數據,該數組後打電話時,我無法找到他們userHasAlreadyLoad;我只能看到一個月的相同的領土編號和年份,這是我添加的第一個月。我在這裏錯過了什麼?

+1

僅供參考 - 不應使用「NSUserDefaults」來存儲應用程序數據。作爲一個其他選項,將字典寫入plist文件。 – rmaddy

回答

0

當你得到dictOfTerritory,你可以打電話給mutableCopy,它會給你一個該字典的副本。而且,您只能將該值複製到該複製的字典中,而不是主dict字典中引用的字典。

請嘗試以下代碼保存字典。

dictOfTerritory[[@(year) stringValue]] = yearData; 
[dict setObject:dictOfTerritory forKey:[territoryId stringValue]]; 
    [[NSUserDefaults standardUserDefaults] setObject:dict forKey:USER_SETTING_MONTHS_LOADED]; 
+0

我已經想通了,但忘了更新它。感謝您的輸入。 – Maystro

相關問題