2017-02-27 37 views
0

我想让视图控制器在运行时使用像这样的笔尖名称, 但是这是崩溃。用xibs让视图控制器在运行时

错误

[setValue方法:forUndefinedKey:]:这个类不是密钥值编码兼容的关键imageViewApp。

let vc = UIViewController(nibName: nibName, bundle: nil) 

当我这样

let vc = MyViewController(nibName: "MyViewController", bundle: nil)的静态值尝试,这是工作。

这是IBOutlet中的MyViewController

我GOOGLE了,但还没有找到足够的解决方案,请让我知道解决的办法。

+0

请提及您的崩溃原因。 –

+0

我得到这个错误 '[ setValue:forUndefinedKey:]:这个类不是密钥值编码兼容的关键imageViewApp。' 这是MyViewController中的IBOutlet –

+0

实际上你使用的是'UIViewController',但是你的类名是'MyViewController'。这意味着xcode需要'UIViewController'类型的对象,但是您有'MyViewController'类型的对象。 –

回答

1

删除imageViewApp财产IBOutlet中从视图控制器并给该ImageView一个标签并通过标签访问它。

+0

你可能是对的,但意味着如果我有超过20个属性,那么我需要通过标签访问它,我认为这没有用,因为它看起来。 –

+0

是的,它没有用,但是由于您需要在运行时创建ViewController,因此无法通过其他方式访问除标签之外的属性,因为无法分配IBOutlet。 –

2

您正在初始化一个UIViewController并且UIViewController没有imageViewApp属性。您需要在您定义该属性的位置初始化自己的子类,就像在第二个示例中那样。

尝试这样:

let vc = MyViewController(nibName: nibName, bundle: nil) 

如果你的笔尖文件具有相同的名称类,你不必指定它:

let vc = MyViewController(nibName: nil, bundle: nil) 
+0

它正如我所说的那样工作,但我想让它运行时,所以视图控制器可以是任何类型的。 –

+0

@GopalDevra也许你正在寻找NSClassFromString?我不确定你想要达到什么。 – DrummerB

+0

是的,我的目标是通过名称在运行时获取类(使用xib),或者可以使用xib文件名。 –

相关问题