Objective c 在Cocoa/OSX中读取用户默认值的最简单方法是什么?
我正在向OSX移植一个简单的unix应用程序,现在在NSView窗口中使用NSView子类。 这个view@界面有三个颜色常量,我不喜欢硬编码,但可以定义为用户默认值,并在启动时加载。这些是: a、 b型和c型,均为[N带设备的彩色:绿色:蓝色:阿尔法]。Objective c 在Cocoa/OSX中读取用户默认值的最简单方法是什么?,objective-c,macos,cocoa,Objective C,Macos,Cocoa,我正在向OSX移植一个简单的unix应用程序,现在在NSView窗口中使用NSView子类。 这个view@界面有三个颜色常量,我不喜欢硬编码,但可以定义为用户默认值,并在启动时加载。这些是: a、 b型和c型,均为[N带设备的彩色:绿色:蓝色:阿尔法]。 我试图了解如何从用户默认文件读取这些值,这些文件可以手动写入,也可以通过默认系统命令写入。另外,在X11中,还试图避免挖掘偏好窗格控制器、颜色井等,这非常简单。我正试图找出用可可豆实现这一目标的最简单方法。它不适用于AppStore类型的应用
我试图了解如何从用户默认文件读取这些值,这些文件可以手动写入,也可以通过默认系统命令写入。另外,在X11中,还试图避免挖掘偏好窗格控制器、颜色井等,这非常简单。我正试图找出用可可豆实现这一目标的最简单方法。它不适用于AppStore类型的应用程序。有没有这样的代码或类似的工作示例-在web上找不到?提前谢谢。您可能正在找这门课。文档中有大量的信息和提示。您可能正在寻找该类。文档中有大量的信息和一个.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
}
是的,是的
这是我使用的代码,我将颜色存储为逗号分隔的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
}
试着阅读苹果的,它和苹果的文档应该能回答大多数问题。您会发现,您甚至可以将颜色井的值直接绑定到用户默认值,因此您可能根本不需要避开它们
HTH试着阅读苹果的,它和苹果的文档应该能回答大多数问题。您会发现,您甚至可以将颜色井的值直接绑定到用户默认值,因此您可能根本不需要避开它们
HTH谢谢@DarkDust。我已经在一些搜索引擎中看到了名为“实现iOS设置捆绑包”的编程指南,我发现这有点不一致,而且很难理解,但我一定错过了NSUserDefaults类参考,包括组织良好的相关信息。谢谢@DarkDust。我已经在一些搜索引擎中找到了名为“实现iOS设置捆绑包”的编程指南,我觉得这有点不一致,也很难理解,但我一定错过了NSUserDefaults类参考,包括组织良好的相关信息。谢谢@Keith Knauber的回答,这似乎是一段很有教育意义的代码片段,值得学习!谢谢@Keith Knauber的回答,这似乎是一段很有教育意义的代码片段,值得学习!我已经仔细阅读了这篇文章,@CRD。我知道这是在OSX应用程序中实现全彩支持的正确方法。为了保持简单,不幸的是,我的应用程序的运行时条件不允许这样做。这就是为什么我必须寻求最简单的解决方案。不过还是要谢谢你@user3078414:这可能是在用户默认设置中支持颜色的最简单方法。什么运行时条件不允许您这样做?感谢您的善意评论@DarkDust。我担心会偏离主题,但仅供参考,该应用程序实际上是通过一个套接字由另一个进程启动和停止的,因此,当它启动时,它已经显示出它应该显示的样子并完成它的工作。因此,可配置的用户默认值必须以某种方式存在于明显的位置。我已经测试了Keith Knauber的回答,它最接近于我想要的简单性。请不要介意重复我的话,以防不够清楚,问题不是关于AppStore级应用程序中的全彩支持。再次感谢!我已经仔细阅读了这篇文章,@CRD。我知道这是在OSX应用程序中实现全彩支持的正确方法。为了保持简单,不幸的是,我的应用程序的运行时条件不允许这样做。这就是为什么我必须寻求最简单的解决方案。不过还是要谢谢你@user3078414:这可能是在用户默认设置中支持颜色的最简单方法。什么运行时条件不允许您这样做?感谢您的善意评论@DarkDust。我担心会偏离主题,但仅供参考,该应用程序实际上是通过一个套接字由另一个进程启动和停止的,因此,当它启动时,它已经显示出它应该显示的样子并完成它的工作。因此,可配置的用户默认值必须以某种方式存在于明显的位置。我已经测试了Keith Knauber的回答,它最接近于我想要的简单性。请不要介意重复我的话,以防不够清楚,问题不是关于AppStore级应用程序中的全彩支持。再次感谢!