Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Objective c 在Cocoa/OSX中读取用户默认值的最简单方法是什么?_Objective C_Macos_Cocoa - Fatal编程技术网

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

Objective c 在Cocoa/OSX中读取用户默认值的最简单方法是什么?,objective-c,macos,cocoa,Objective C,Macos,Cocoa,我正在向OSX移植一个简单的unix应用程序,现在在NSView窗口中使用NSView子类。 这个view@界面有三个颜色常量,我不喜欢硬编码,但可以定义为用户默认值,并在启动时加载。这些是: a、 b型和c型,均为[N带设备的彩色:绿色:蓝色:阿尔法]。 我试图了解如何从用户默认文件读取这些值,这些文件可以手动写入,也可以通过默认系统命令写入。另外,在X11中,还试图避免挖掘偏好窗格控制器、颜色井等,这非常简单。我正试图找出用可可豆实现这一目标的最简单方法。它不适用于AppStore类型的应用

我正在向OSX移植一个简单的unix应用程序,现在在NSView窗口中使用NSView子类。 这个view@界面有三个颜色常量,我不喜欢硬编码,但可以定义为用户默认值,并在启动时加载。这些是: a、 b型和c型,均为[N带设备的彩色:绿色:蓝色:阿尔法]。
我试图了解如何从用户默认文件读取这些值,这些文件可以手动写入,也可以通过默认系统命令写入。另外,在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级应用程序中的全彩支持。再次感谢!