【问题标题】:Load NIB from variable从变量加载 NIB
【发布时间】:2011-07-22 00:47:22
【问题描述】:

我正在尝试根据从设置文件中获取的变量加载 NIB。这是代码:

//select the right nib name
NSString *nibVar = [nibs objectForKey:@"controller"];

// create the view controller from the selected nib name
UIViewController *aController = [[UIViewController alloc] initWithNibName:nibVar bundle:nil];
aController.modalTransitionStyle = UIModalTransitionStyleFlipHorizontal;
[self presentModalViewController:aController animated:YES];
[aController release];

不幸的是,这不起作用。

这里有什么想法吗?

谢谢

【问题讨论】:

  • 什么不起作用?控制台是否显示错误?什么都没发生?
  • 它给出了这个错误:***由于未捕获的异常'NSUnknownKeyException'而终止应用程序,原因:'[ setValue:forUndefinedKey:]:这个类不符合键值编码键滚动条。'

标签: iphone uiviewcontroller xib nib


【解决方案1】:

您不能使用任意 NIB 实例化“UIViewController”,您必须使用该类的 NIB 实例化“[无论您的自定义视图控制器类是什么]”。

它正在崩溃,因为它试图访问 UIViewController 中不存在的属性。

如果你想做这种动态的视图控制器加载,你需要做更多的工作,并使用特殊的 Class 类方法,它可以让你使用一个字符串作为类名来实例化一个对象,而不是硬-编码。

有点像:

Class viewControllerClass = NSClassFromString( nibVar );
UIViewController* aController = (UIViewController*) [[viewControllerClass alloc] initWithNibName:nibVar bundle:nil];

【讨论】:

  • 检查。很高兴知道!感谢您的帮助!
【解决方案2】:

确保 NIB 名称正确且不包含 xib 扩展名。它也区分大小写。

【讨论】:

  • NIB 名称正确。如果我将 plist 中的名称粘贴到代码中,一切都会像魅力一样!
  • UIViewController 的设置有问题。如果我用我的类名 'settingsViewController' 替换这些并且我保持 initWithNibName:nibVar 不变,那么它就可以工作。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-02-08
  • 2023-03-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多