Objective-C:NSClassFromString()与导航控制器一起使用?

时间:2011-08-22 05:07:14

标签: iphone objective-c ios nsobject

我想使用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];

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

2 个答案:

答案 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:(通常是这样)。