我面临将NSString转换为目标C的可执行语句的问题。
例如,
NSString *strColorAssembly = @"[UIColor redColor]";
现在,我需要将此字符串转换为可执行代码并传递给.color属性。 这只是一个例子,我正在尝试建立一个项目,其中一切都将是动态的,所以如果任何人能够为我提供正确的方向,那将会非常有用。
答案 0 :(得分:0)
你不能在iOS上做到这一点。 iOS阻止您分配既可以写入也可以执行的内存页面。
您可以管理的最好的是一个解释器,它接受字符串,解析它们,并尝试将它们映射到Objective-C调用(使用NSClassFromString
和NSSelectorFromString
)。
我建议不要做你想做的事情,而是使用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
作为字符串,并为其余数据编写某种解释器。