NSString到类实例变量

时间:2011-11-27 18:21:04

标签: objective-c ios nsstring nsobject

我正在寻找一种从NSString转换为类实例变量的方法。对于下面的示例代码,请说filter是“colorFilter”。我希望filternameclassinstancegohere替换为colorFilter。

- (void)filterSelected:(NSString *)filter
{
    self.filternameclassinstancegohere = ….;
}

4 个答案:

答案 0 :(得分:5)

虽然为这个问题提供了很好的建议解决方案,但我发现我需要的是NSClassFromString方法。这是最终实施:

- (void)filterSelected:(NSString *)filter
{
    //self.filternameclassinstancegohere = ….;
    self.myViewController = [[NSClassFromString(filter) alloc] initWithNibName:filter bundle:nil];

}

答案 1 :(得分:4)

考虑将一个NSMutableDictionary实例变量与字符串键而不是40个实例变量一起使用。

答案 2 :(得分:2)

您可以使用NSSelectorFromString()

创建任意选择器
SEL methodName = NSSelectorFromString(filter);
[self performSelector:methodName];

这将在上面的示例中调用方法colorFilter

在打电话之前检查respondsToSelector是明智的。

答案 3 :(得分:1)

如果过滤器值只能是一个小的,常数的东西,只需使用枚举和switch语句:

enum Filter
{
  ColorFilter,
  FooFilter,
  BarFilter
};

- (void)filterSelected:(Filter)filter
{
  switch(filter)
  {
  case ColorFilter:
    self.colorFilter = ...;
    break;
  case FooFilter:
    self.fooFilter = ...;
    break;
  case BarFilter:
    self.barFilter = ...;
    break;
  }
}

如果过滤器值集很大并且可能经常更改,那么您也可以使用Key-Value Coding。它更复杂但更灵活。