我的应用程序在界面中声明了大量视图控制器,例如:
ViewController_1_0 *viewController_1_0
ViewController_1_1 *viewController_1_1
ViewController_1_2 *viewController_1_2
etc ...
(我意识到下划线对于类名来说不是一个好的 Cocoa 编码约定,并且会改变它。)
我的意图是根据当前的 UIStepper 值呈现适当的控制器视图。
而不是对每个步进器值进行条件测试,然后使用“硬编码”视图控制器执行控制器对象的单独延迟实例化,我试图让代码出现一次,使用基于当前步进器值构造的字符串。
我已经弄清楚(在使用存储在变量中的类名来调用类方法的帮助下?)如何设置类名:我已经声明了一个属性:
@property(strong, nonatomic) Class classStringClass;
然后在为类构造变量字符串之后,我这样做:
classStringClass = NSClassFromString(classString);
其中 classString 是使用 stepper 值构造的字符串,例如等效于 ViewController_1_0。
我还为 ivar 声明了一个属性:
@property (strong, nonatomic) NSString *classInstanceString;
因此我这样做:
if(!classInstanceString) {
classInstanceString = [[classStringClass alloc] initWithNibName:classString bundle:nil];
}
我被卡住的地方是如何为控制器的 ivar 编写代码,即 classInstanceString 构造为与接口中声明的 ivar viewController_1_0 (或任何基于步进值的值)等效。一旦我摆脱了惰性实例化 if 语句,然后代码访问 classInstanceString 的属性,例如:
classInstanceString.view.hidden = NO;
可以理解,classInstanceString 会收到错误“在 'NSString' 类型的对象上找不到属性 'view'”。
如何声明“classInstanceString”(或另一个变量,比如包含 classInstanceString 值的“classInstanceVariable”),以便在实例化它时,它是 classStringClass 的 ivar 并且可以访问类属性,以便在类的实例化之后使用?我推测它应该是与 NSString 不同的类型,但那会是什么类型,或者有其他方法可以做到这一点吗?