我只是試圖保存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;我只能看到一個月的相同的領土編號和年份,這是我添加的第一個月。我在這裏錯過了什麼?
僅供參考 - 不應使用「NSUserDefaults」來存儲應用程序數據。作爲一個其他選項,將字典寫入plist文件。 – rmaddy