我想使用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];
有没有更好的方法来做我在这里尝试的事情?
答案 0 :(得分:2)
你可以简单地做
UIViewController *newObject = (UIViewController *)[[screenClass alloc] init];
然后将删除警告。
答案 1 :(得分:1)
如果无法静态输入变量,则无法使用点表示法。如果所有可能的类都来自声明该方法的一个公共类,则可以将其静态地键入该类。否则,您需要使用asset
属性的访问器方法:
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
属性的setter是setAsset:
(通常是这样)。