diff --git a/ChangeLog b/ChangeLog index 11d1d40f3..9ad4f45cc 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,8 @@ +2009-06-22 Fred Kiefer + + * Source/NSUserDefaultsController.m (-initWithCoder:): Retain the + shared controller before returning it. + 2009-06-22 Fred Kiefer * Source/NSKeyValueBinding.m (GSKeyValueBinding+initialize): diff --git a/Source/NSUserDefaultsController.m b/Source/NSUserDefaultsController.m index 7a3f5ce11..b94784d3e 100644 --- a/Source/NSUserDefaultsController.m +++ b/Source/NSUserDefaultsController.m @@ -200,6 +200,12 @@ static id shared = nil; - (void) dealloc { + if (self == shared) + { + // Should never get here + shared = nil; + } + [[NSNotificationCenter defaultCenter] removeObserver: self]; RELEASE(_values); RELEASE(_defaults); @@ -296,7 +302,7 @@ static id shared = nil; - (void) encodeWithCoder: (NSCoder *)aCoder { if ([aCoder allowsKeyedCoding]) - if (self == [NSUserDefaultsController sharedUserDefaultsController]) + if (self == shared) { [aCoder encodeBool: YES forKey: @"NSSharedInstance"]; return; @@ -311,7 +317,7 @@ static id shared = nil; if ([aDecoder decodeBoolForKey: @"NSSharedInstance"]) { RELEASE(self); - return [NSUserDefaultsController sharedUserDefaultsController]; + return RETAIN([NSUserDefaultsController sharedUserDefaultsController]); } return [super initWithCoder: aDecoder];