I have the following code that should update a value in NSUserDefaults:
- (id) createBoardWithTitle:(NSString *)pTitle withScores:(NSArray *)pScores andNames:(NSArray *)pNames andDisplayStrings:(NSArray *)pStrings orderBy:(NSString *)pOrder ofType:(NSString *)pType
{
if((self == [super init]))
{
boardEntries = [NSMutableArray arrayWithCapacity:10];
for(...){
}
NSDictionary *savedData = [NSDictionary dictionaryWithObjectsAndKeys:pType, @"type", pOrder, @"order", boardEntries, @"entries", nil];
NSDictionary *existingBoards = [[NSUserDefaults standardUserDefaults] objectForKey:@"BlockDepotLeaderboards"];
NSMutableDictionary *newBoards = [NSMutableDictionary dictionaryWithCapacity:[existingBoards count]+1];
[newBoards addEntriesFromDictionary:existingBoards];
[newBoards setObject:savedData forKey:pTitle];
NSLog(@"New Boards: %@", newBoards);
[[NSUserDefaults standardUserDefaults] setObject:newBoards forKey:@"BlockDepotleaderboards"];
[[NSUserDefaults standardUserDefaults] synchronize];
NSLog(@" Defaults--- %@", [[NSUserDefaults standardUserDefaults] objectForKey:@"BlockDepotLeaderboards"]);
}
return self;
}
As far as I can tell, this is a local code. This is probably "more verbose" than it should be. But, as I understand it, everything that came back from NSUserDefaults will be immutable, so I have to recreate it as a Mutable object, add what I need to add, and then replace the object in NSUserDefaults. And I think that what I'm trying to do above should work.
output for NSLog (@ "New boards:% @", newBoards) id
New Boards: {
"Marathon: Times" = {
entries = (
{
displayString = "10:00";
name = "Tom Elders";
score = 600;
},
{
displayString = "10:30";
name = "A.R. Elders";
score = 630;
},
{
displayString = "11:00";
name = "L. Lancaster-Harm";
score = 660;
},
// and so on.....
);
order = ASC;
type = TIMES;
};
String = Test;
}
"String = test" is just a test entry and is set in the AppDelegate.m file as follows:
if(![[NSUserDefaults standardUserDefaults] objectForKey:@"BlockDepotLeaderboards"]){
NSMutableDictionary *leadboardHolder = [NSMutableDictionary dictionaryWithObjectsAndKeys:@"Test", @"String", nil];
[[NSUserDefaults standardUserDefaults] setObject:leadboardHolder forKey:@"BlockDepotLeaderboards"];
[[NSUserDefaults standardUserDefaults] synchronize];
}else{
NSLog(@"Leaderboards Dict Exists %@", [NSUserDefaults standardUserDefaults]);
}
So, I know that what I need definitely exists. I just know that it will be something stupid that I am missing. But I do not see this or do not understand.
- , ?