在Cocoa / OSX中读取用户默认值的最简单方法是什么?

时间:2015-03-17 17:09:06

标签: objective-c macos cocoa

我正在移植到 OSX 一个简单的 unix 应用程序,现在在 NSWindow 中使用 NSView 子类。 有三个颜色常量(这个视图@interface的成员),我更喜欢没有硬编码,但可以定义为用户默认值(并在启动时加载)。这些是: a,b c,所有类型 [NSColor colorWithDeviceRed:green:blue:alpha] 。 我正在尝试了解如何从用户默认文件中读取 ,这些值可以手动编写,也可以通过默认值系统命令。还试图远离挖掘Preference Pane Controllers,Color Wells等。在 X11 中,这非常简单。我试图找出在 Cocoa 中实现它的最简单方法。它不适用于“AppStore”类型的应用程序。这样的代码或类似的代码是否有任何工作示例 - 在网络上找不到任何代码?提前谢谢。

3 个答案:

答案 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