Objective-C 在 NSUserDefaults 中保存 NSColor

Posted

技术标签:

【中文标题】Objective-C 在 NSUserDefaults 中保存 NSColor【英文标题】:Objective-C save NSColor in NSUserDefaults 【发布时间】:2011-02-16 14:18:06 【问题描述】:

如何保存点的颜色,以便在打开和关闭应用程序时,点是用户上次设置的颜色?

有人可以向我解释如何使用NSUserDefaults 以及在哪些方法中声明NSUserDefaults

到目前为止,我有这个:

NSData *data = [NSArchiver archivedDataWithRootObject:color];
[[NSUserDefaults standardUserDefaults] setObject:data forKey:@"MyColor"];

NSData *data = [[NSUserDefaults standardUserDefaults] objectForKey:@"MyColor"];
NSColor *color = [NSUnarchiver unarchiveObjectWithData:data];

我遵循的教程链接: http://www.mactech.com/articles/mactech/Vol.25/25.04/2504RoadtoCode/index.html

【问题讨论】:

不清楚你在问什么。您上面的代码看起来不错(除非您可能应该在取消归档之前向 (NSColor *) 添加强制转换)。您到底在寻找什么? The app displays a circle who's color is controlled by a color well, what I want do is, when the color well is selected and a new color is chosen I want to save that new color and set the圈到那个颜色。然后当应用程序再次重新打开时,我想将圆圈的颜色设置为保存的颜色。 【参考方案1】:

这是我用的:

- (NSColor *)colorForKey:(NSString *)key

    NSData  *data;
    NSColor *color;

    data = [[NSUserDefaults standardUserDefaults] objectForKey:key];
    color= [NSUnarchiver unarchiveObjectWithData:data];
    if( ! [color isKindOfClass:[NSColor class]] )
    
        color = nil;
    

    return color;
    

- (void)setColor:(NSColor *)color forKey:(NSString *)key

    NSData *data = [NSArchiver archivedDataWithRootObject:color];
    [[NSUserDefaults standardUserDefaults] setObject:data forKey:key];

    [BFChatWindow refresh];

【讨论】:

导致问题的不是 Dvorak(我使用它),而是代码格式中的制表符而不是空格。 @Abizern 当我复制粘贴时它不起作用,这是 dvorak 和堆栈溢出的问题 @Abizern 可能是因为我使用 Dvorak - Qwerty,dvorak 打字布局,但 qwerty cmd + 其他 - 因为大多数命令都适用于 qwerty 布局,所以更容易

以上是关于Objective-C 在 NSUserDefaults 中保存 NSColor的主要内容,如果未能解决你的问题,请参考以下文章

在 iOS 中保存访问令牌的最佳实践

如何在 swift 中保存和读取 NSUserdefaults 中的数组数组?

将 NSUrl 转换为 PHAsset iOS 8

如何在c++中,调用objective-c

iOS:NSUserDefaults 是不是与 iCloud 同步?

objective-c入门