Adium

Changeset 22539

Show
Ignore:
Timestamp:
01/31/2008 10:44:50 PM (10 months ago)
Author:
evands
Message:

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.

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • trunk/Frameworks/Adium Framework/Source/AIStatusMenu.m

    r22114 r22539  
    410410                NSDictionary *lastStatusStates = [[adium preferenceController] preferenceForKey:@"LastStatusStates" 
    411411                                                                                                                                                                  group:PREF_GROUP_STATUS_PREFERENCES]; 
    412                  
    413                 NSData          *lastStatusStateData = [lastStatusStates objectForKey:[NSNumber numberWithInt:statusType]]; 
     412                NSData          *lastStatusStateData = [lastStatusStates objectForKey:[[NSNumber numberWithInt:statusType] stringValue]]; 
    414413                AIStatus        *lastStatusStateOfThisType = (lastStatusStateData ? 
    415                                                                                                   [NSKeyedUnarchiver unarchiveObjectWithData:lastStatusStateData] : 
     414                                                                                                  [[NSKeyedUnarchiver unarchiveObjectWithData:lastStatusStateData] objectAtIndex:0] : 
    416415                                                                                                  nil); 
    417                  
     416 
    418417                baseStatusState = [[lastStatusStateOfThisType retain] autorelease]; 
    419418        } 
  • trunk/Source/AIStatusController.m

    r21211 r22539  
    179179        } 
    180180         
    181         //XXX change this back sometime before 1.0 release 
    182 //      [[adium preferenceController] setPreference:[NSKeyedArchiver archivedDataWithRootObject:[self rootStateGroup]] 
    183181        [[adium preferenceController] setPreference:[NSKeyedArchiver archivedDataWithRootObject:[[self rootStateGroup] containedStatusItems]] 
    184182                                                                                 forKey:KEY_SAVED_STATUS 
     
    11261124- (void)savedStatusesChanged 
    11271125{ 
    1128         //XXX change this back sometime before 1.0 release 
    1129 //      [[adium preferenceController] setPreference:[NSKeyedArchiver archivedDataWithRootObject:[self rootStateGroup]] 
    11301126        [[adium preferenceController] setPreference:[NSKeyedArchiver archivedDataWithRootObject:[[self rootStateGroup] containedStatusItems]] 
    11311127                                                                                 forKey:KEY_SAVED_STATUS 
     
    11361132- (void)statusStateDidSetUniqueStatusID 
    11371133{ 
    1138         //XXX change this back sometime before 1.0 release 
    1139 //      [[adium preferenceController] setPreference:[NSKeyedArchiver archivedDataWithRootObject:[self rootStateGroup]] 
    11401134        [[adium preferenceController] setPreference:[NSKeyedArchiver archivedDataWithRootObject:[[self rootStateGroup] containedStatusItems]] 
    11411135                                                                                 forKey:KEY_SAVED_STATUS 
     
    11881182        NSMutableDictionary *lastStatusStates; 
    11891183         
    1190         lastStatusStates = [[[adium preferenceController] preferenceForKey:@"LastStatusStates" 
    1191                                                                                                                                  group:PREF_GROUP_STATUS_PREFERENCES] mutableCopy]; 
     1184        lastStatusStates = [[[[adium preferenceController] preferenceForKey:@"LastStatusStates" 
     1185                                                                                                                                  group:PREF_GROUP_STATUS_PREFERENCES] mutableCopy] autorelease]; 
    11921186        if (!lastStatusStates) lastStatusStates = [NSMutableDictionary dictionary]; 
    11931187         
    1194         [lastStatusStates setObject:[NSKeyedArchiver archivedDataWithRootObject:statusState
    1195                                                  forKey:[NSNumber numberWithInt:[statusState statusType]]]; 
    1196          
     1188        [lastStatusStates setObject:[NSKeyedArchiver archivedDataWithRootObject:[NSArray arrayWithObject:statusState]
     1189                                                 forKey:[[NSNumber numberWithInt:[statusState statusType]] stringValue]]; 
     1190 
    11971191        [[adium preferenceController] setPreference:lastStatusStates 
    11981192                                                                                 forKey:@"LastStatusStates"