我想使用NSClassFromString()将字符串传递给,以便确定将哪个类推送到导航控制器上。问题是,我想将一个值传递给此类,这会导致错误,并且由于NSObject不是UIViewController类型的类,因此尝试推送视图控制器也会导致错误。

Class screenClass = NSClassFromString(screen.name);
NSObject* newClass = [[screenClass alloc] init];
newClass.asset = asset; // Causes errors because asset not in NSObject
[self.navigationController pushViewController:newClass animated:YES];// newClass is an NSObject
[newClass release];


有没有更好的方法来做我在这里尝试的事情?

最佳答案

如果无法静态键入变量,则不能使用点表示法。如果所有可能的类均来自声明该方法的一个公共类,则可以将其静态键入为该类。否则,您需要对asset属性使用accessor方法:

Class screenClass = NSClassFromString(screen.name);
id newClass = [[screenClass alloc] init]; // note that it's an id to indicate that we don't know what it'll be more specifically than an object
[newClass setAsset:asset];
[self.navigationController pushViewController:newClass animated:YES];
[newClass release];


这假定asset属性的设置器是setAsset:(通常是)。

关于iphone - Objective-C:NSClassFromString()与导航 Controller 一起使用?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/7143379/

10-13 02:55