Become a MacRumors Supporter for $50/year with no ads, ability to filter front page stories, and private forums.

bobber205

macrumors 68020
Original poster
Nov 15, 2005
2,183
8
Oregon
I've been enjoying NSUserDefaults when going through the Hillegeass book.

I've decided to do a small app that has two colors it stores. I get these colors from a colorwell via Preference Pane.

I have bounded the values of the wells to backGroundWell and lineWell in IB.

I have the appropriately named methods. I know my bindings are ok becuase if I just return [NSColor whiteColor] instead of the data
from NSUserDefaults, they're yellow when I open the pane. so that's ok.

I am pretty sure I'm getting a null from the defaults because the wells are black. I have no "blackColor" in my project. Already searched for that. ;)

What am I doing wrong? I thought that NSUserDefaults was pretty simple...

Below are my getters and setters.
Code:
-(NSColor*)backGroundWell
{
   
    NSLog(@"called BGwell");

    NSUserDefaults* defaults = [NSUserDefaults standardUserDefaults];
    NSData* data = [defaults objectForKey:@"BGCOLOR"];
    NSColor* newColor = [NSKeyedUnarchiver unarchiveObjectWithData:data];
    NSLog(@"retrieved Color for BG is %@", newColor);
    //NSLog(@"%@",[NSKeyedUnarchiver unarchiveObjectWithData:data]);
    return [NSKeyedUnarchiver unarchiveObjectWithData:data];
}
-(NSColor*)lineWell
{

    NSUserDefaults* defaults = [NSUserDefaults standardUserDefaults];
    NSData* data = [defaults objectForKey:@"LINECOLOR"];
    return [NSKeyedUnarchiver unarchiveObjectWithData:data];
}

-(void)setBackGroundWell: (NSColor*)newColor
{
    NSLog(@"New Color is %@", newColor);
    NSUserDefaults* defaults = [NSUserDefaults standardUserDefaults];
    NSColor* color = [backGroundWell color];
    NSData* colorData = [NSKeyedArchiver archivedDataWithRootObject:color];
    [defaults setObject:colorData forKey:@"BGCOLOR"];
    NSLog(@"changing background color");
}
-(void)setLineWell: (NSColor*)newColor
{
    NSLog(@"New Color is %@", newColor);
    NSUserDefaults* defaults = [NSUserDefaults standardUserDefaults];
    NSData* colorData = [NSKeyedArchiver archivedDataWithRootObject:[lineWell color] ];
    [defaults setObject:colorData forKey:@"LINECOLOR"];
    NSLog(@"changing line color");
   
}


-------
Below is my +(void) initialize method

Code:
+(void) initialize
{
   
    NSMutableDictionary* defaultValues = [NSMutableDictionary dictionary];
   
    NSData* backgroundColorData = [NSKeyedArchiver archivedDataWithRootObject:[NSColor greenColor] ];
    NSData* lineColorData = [NSKeyedArchiver archivedDataWithRootObject:[NSColor whiteColor] ];
   
    [defaultValues setObject:backgroundColorData forKey:@"BGCOLOR"];
    [defaultValues setObject:lineColorData forKey:@"LINECOLOR"];
   
    [[NSUserDefaults standardUserDefaults] registerDefaults:defaultValues];
    NSLog(@"registered defaults %@", defaultValues);
   
}[/
SIZE]


EDIT:
I need to add something: I tried reading a NSString from the prefs and that worked just fine. So it's something to due with writing it as NSData...
 
Register on MacRumors! This sidebar will go away, and you'll see fewer ads.