我正在移植到 OSX 一个简单的 unix 应用程序,现在在 NSWindow 中使用 NSView 子类。 有三个颜色常量(这个视图@interface的成员),我更喜欢没有硬编码,但可以定义为用户默认值(并在启动时加载)。这些是: a,b 和 c,所有类型 [NSColor colorWithDeviceRed:green:blue:alpha] 。 我正在尝试了解如何从用户默认文件中读取 ,这些值可以手动编写,也可以通过默认值系统命令。还试图远离挖掘Preference Pane Controllers,Color Wells等。在 X11 中,这非常简单。我试图找出在 Cocoa 中实现它的最简单方法。它不适用于“AppStore”类型的应用程序。这样的代码或类似的代码是否有任何工作示例 - 在网络上找不到任何代码?提前谢谢。
答案 0 :(得分:3)
NSUserDefaults,是的......
这是我使用的代码,我将颜色存储为以逗号分隔的rgb值。
- (id)getUserPref:(NSString *)aSelector
{
id returnVal = nil;
NSString *val = [[NSUserDefaults standardUserDefaults] objectForKey:aSelector];
NSArray *vals = [val componentsSeparatedByString:@","];
float rgba[4];
// brute force validation of string... funky but safe
if ( [vals count] <= 4 )
{
for ( int idx = 0; idx < [vals count]; idx++ )
{
val = [vals objectAtIndex:idx];
val = [val stringByTrimmingCharactersInSet:[[NSCharacterSet characterSetWithCharactersInString:@"01234567890."] invertedSet]];
if ( [val length] )
{
rgba[idx] = [val floatValue];
if ( rgba[idx] > 255 || rgba[idx] < 0 )
break;
if ( [vals count] == 1 )
{
returnVal = [[NSColor colorWithContrastWhite:rgba[0]/255.0 alpha:1.0] retain];
return returnVal;
}
else if ( idx == 2 && [vals count] == 3 )
{
returnVal = [[NSColor colorWithContrastRed:rgba[0]/255.0 green:rgba[1]/255.0 blue:rgba[2]/255.0 alpha:1.0] retain];
return returnVal;
}
else if ( idx == 3 && [vals count] == 4 )
{
returnVal = [[NSColor colorWithContrastRed:rgba[0]/255.0 green:rgba[1]/255.0 blue:rgba[2]/255.0 alpha:rgba[3]/255.0] retain];
return returnVal;
}
}
}
}
DLogErr(@"bad BGThemeMbox user pref %@", aSelector);
return nil; // better have a fallback color
}
答案 1 :(得分:1)
尝试阅读Apple的Storing NSColor in User Defaults,以及NSUserDefaults
的文档应该回答大多数问题。您会发现甚至可以将颜色井的值直接绑定到用户默认值,因此您可能根本不需要避开它们。
HTH
答案 2 :(得分:0)
您可能正在寻找NSUserDefaults课程。该文档包含大量信息和programming guide。