将NSString转换为可执行语句

时间:2013-06-19 17:41:07

标签: ios nsstring

我面临将NSString转换为目标C的可执行语句的问题。

例如,

NSString *strColorAssembly = @"[UIColor redColor]";

现在,我需要将此字符串转换为可执行代码并传递给.color属性。 这只是一个例子,我正在尝试建立一个项目,其中一切都将是动态的,所以如果任何人能够为我提供正确的方向,那将会非常有用。

3 个答案:

答案 0 :(得分:0)

你不能在iOS上做到这一点。 iOS阻止您分配既可以写入也可以执行的内存页面。

您可以管理的最好的是一个解释器,它接受字符串,解析它们,并尝试将它们映射到Objective-C调用(使用NSClassFromStringNSSelectorFromString)。

我建议不要做你想做的事情,而是使用Cocoa中的许多绑定之一到动态语言。我认为最流行的将Cocoa绑定到Lua,所以你可以编写你的Lua代码,一切都将是动态的。

答案 1 :(得分:0)

我不确定您是否可以通过编程方式实现该目标。如果是我,我将实现一个接受NSString(或NSInteger)并返回UIColor的方法。

- (UIColor *)colorDecode:(NSString *)colorPassed
{
 if ([colorPassed isEqualToString @"red"])
 {
  return [UIColor redColor];
 }
 else if
 .
 .
 .
}

OR

- (UIColor *)colorDecodewithInt:(NSUInteger)colorIndex
{
 switch (colorIndex)
 {
  case (0)
  {
   return [UIColor redColor];
   break;
  }
  case (1)
  .
  .
  .
  .
  default
  {
   return <some default color>;
   break;
  }
 }
}

编辑: 我想你也可以使用一个由一系列UIColor对象组成的NSDictionary。最重要的是,除非你开始使用CGColor,否则你将被限制在编译代码中的预定义颜色集,此时你可以开始动态传递RGB值。

答案 2 :(得分:0)

听起来你正在寻找的是setValue:ForKey:方法。任何符合NSKeyValueCoding协议的东西都可以使用该选项。但是,这仅适用于key部分(即属性的名称)。 iOS明确禁止对分布式代码进行任何修改。我建议使用key作为字符串,并为其余数据编写某种解释器。