【发布时间】:2014-07-16 10:19:29
【问题描述】:
如何使用占位符来表示班级名称?我有基于传入参数按名称引用其他类的方法。在下面的粗略示例中,我需要能够仅根据名称加载三个 ViewController 之一(而不是 ViewController 数组,因为这只是一个示例)。
-(void)loadViewController:(int)vcNumberToLoad
{
NSString *vcOne = @"firstViewControllerName";
NSString *vcTwo = @"secondViewControllerName";
NSString *vcThree = @"thirdViewControllerName";
NSArray *vcArray = [NSArray arrayWithObjects:vcOne, vcTwo, vcThree, nil];
NSString *nameOfVCToLoad = [vcArray objectAtIndex:vcNumberToLoad];
UIViewController |VALUE OF nameOfVCToLoad| = [[UIViewController alloc] init]; // What is the code to get the value of nameOfVCToLoad to be used as the instance name of the UIVC class
[self.navigationController pushViewController:|VALUE OF nameOfVCToLoad| animated:NO];
}
例如,如果方法使用参数 '1' 运行
NSString *nameOfVCToLoad = [vcArray objectAtIndex:vcNumberToLoad]; //this would = secondViewControllerName
UIViewController secondViewControllerName = [[UIViewController alloc] init];
[self.navigationController pushViewController:secondViewControllerName animated:NO];
其他问题似乎暗示 [NSClassFromString:nameOfVCToLoad] 可能符合我的需要,如果是的话,如何?
【问题讨论】:
-
为什么要关心local变量名?
-
这纯粹是一个例子,试图说明我想知道如何使用 NSString 作为类的实际名称的占位符的主要观点。
-
变量名用于在开发会话期间使代码可读。在 runtime 中,处理器不会使用 var 的名称,它仅在 addresses 中起作用。因此,您在 runtime 期间动态定义变量名的问题在实践中没有太大意义。
-
在我的示例中,可能有 100 个动态创建的按钮都使用相同的选择器方法。该方法只能真正获取按钮标签,然后该标签可以用于加载相关的ViewController。我的想法是标签可以对应于任何数组的索引,索引处的项目将是项目名称。这个项目名称可以用于多种事物,其中之一是要加载的相应 ViewController 的名称。我认为在这种情况下可以使用占位符。
标签: ios objective-c cocoa-touch uiviewcontroller nsstring