From 90e2df8a2d8c39bb86e661ebe579b3b9d8f447ba Mon Sep 17 00:00:00 2001 From: Evan Schoenberg Date: Fri, 1 Feb 2008 03:44:50 +0000 Subject: [PATCH] Don't use an `NSNumber` key in a dictionary which will be saved as a preference, as this prevents the entire preference group from saving; you must use an `NSString`. We now have logging which points the problem out. Fixes #9082 (Custom status pre-population with previous message. Fixes #225 (yes, a ticket from 3 years ago!) which was previously very, very mysterious - the preference in question is in the same group as the last-status preference, which is why it wouldn't save. git-svn-id: svn://svn.adiumx.com/adium/trunk@22539 1c916fce-81e2-0310-a464-8ca513f45935 --- Frameworks/Adium Framework/Source/AIStatusMenu.m | 7 +++---- Source/AIStatusController.m | 16 +++++----------- 2 files changed, 8 insertions(+), 15 deletions(-) diff --git a/Frameworks/Adium Framework/Source/AIStatusMenu.m b/Frameworks/Adium Framework/Source/AIStatusMenu.m index ff750b6af..b3da04a93 100644 --- a/Frameworks/Adium Framework/Source/AIStatusMenu.m +++ b/Frameworks/Adium Framework/Source/AIStatusMenu.m @@ -409,12 +409,11 @@ if (([baseStatusState statusType] != statusType)) { NSDictionary *lastStatusStates = [[adium preferenceController] preferenceForKey:@"LastStatusStates" group:PREF_GROUP_STATUS_PREFERENCES]; - - NSData *lastStatusStateData = [lastStatusStates objectForKey:[NSNumber numberWithInt:statusType]]; + NSData *lastStatusStateData = [lastStatusStates objectForKey:[[NSNumber numberWithInt:statusType] stringValue]]; AIStatus *lastStatusStateOfThisType = (lastStatusStateData ? - [NSKeyedUnarchiver unarchiveObjectWithData:lastStatusStateData] : + [[NSKeyedUnarchiver unarchiveObjectWithData:lastStatusStateData] objectAtIndex:0] : nil); - + baseStatusState = [[lastStatusStateOfThisType retain] autorelease]; } diff --git a/Source/AIStatusController.m b/Source/AIStatusController.m index 277e85654..071d7a87e 100644 --- a/Source/AIStatusController.m +++ b/Source/AIStatusController.m @@ -178,8 +178,6 @@ static NSMutableSet *temporaryStateArray = nil; group:GROUP_ACCOUNT_STATUS]; } - //XXX change this back sometime before 1.0 release -// [[adium preferenceController] setPreference:[NSKeyedArchiver archivedDataWithRootObject:[self rootStateGroup]] [[adium preferenceController] setPreference:[NSKeyedArchiver archivedDataWithRootObject:[[self rootStateGroup] containedStatusItems]] forKey:KEY_SAVED_STATUS group:PREF_GROUP_SAVED_STATUS]; @@ -1125,8 +1123,6 @@ static NSMutableSet *temporaryStateArray = nil; */ - (void)savedStatusesChanged { - //XXX change this back sometime before 1.0 release -// [[adium preferenceController] setPreference:[NSKeyedArchiver archivedDataWithRootObject:[self rootStateGroup]] [[adium preferenceController] setPreference:[NSKeyedArchiver archivedDataWithRootObject:[[self rootStateGroup] containedStatusItems]] forKey:KEY_SAVED_STATUS group:PREF_GROUP_SAVED_STATUS]; @@ -1135,8 +1131,6 @@ static NSMutableSet *temporaryStateArray = nil; - (void)statusStateDidSetUniqueStatusID { - //XXX change this back sometime before 1.0 release -// [[adium preferenceController] setPreference:[NSKeyedArchiver archivedDataWithRootObject:[self rootStateGroup]] [[adium preferenceController] setPreference:[NSKeyedArchiver archivedDataWithRootObject:[[self rootStateGroup] containedStatusItems]] forKey:KEY_SAVED_STATUS group:PREF_GROUP_SAVED_STATUS]; @@ -1187,13 +1181,13 @@ static NSMutableSet *temporaryStateArray = nil; { NSMutableDictionary *lastStatusStates; - lastStatusStates = [[[adium preferenceController] preferenceForKey:@"LastStatusStates" - group:PREF_GROUP_STATUS_PREFERENCES] mutableCopy]; + lastStatusStates = [[[[adium preferenceController] preferenceForKey:@"LastStatusStates" + group:PREF_GROUP_STATUS_PREFERENCES] mutableCopy] autorelease]; if (!lastStatusStates) lastStatusStates = [NSMutableDictionary dictionary]; - [lastStatusStates setObject:[NSKeyedArchiver archivedDataWithRootObject:statusState] - forKey:[NSNumber numberWithInt:[statusState statusType]]]; - + [lastStatusStates setObject:[NSKeyedArchiver archivedDataWithRootObject:[NSArray arrayWithObject:statusState]] + forKey:[[NSNumber numberWithInt:[statusState statusType]] stringValue]]; + [[adium preferenceController] setPreference:lastStatusStates forKey:@"LastStatusStates" group:PREF_GROUP_STATUS_PREFERENCES]; -- 2.11.4.GIT