【发布时间】:2013-05-11 07:41:07
【问题描述】:
我是 iOS 开发的新手,我在理解文件所有者逻辑时遇到了问题。
我有这种情况:
我有两个视图(View_iPad、View_iPhone)和它们的控制器(ViewController_iPad、ViewController_iPhone)。基于启动应用程序的设备,使用特定的视图及其控制器。然后,我将 xib 文件中的子视图添加到此视图(使用 iPad 或 iPhone 视图无关紧要)。假设这个子视图在 iPad 和 iPhone 视图中的位置不同。这个子视图包含一些标签,所以我必须在子视图控制器中创建 IBoulets。
如果我理解,根据苹果的逻辑,视图的文件所有者是一个控制器(可以访问该视图并可以与之通信的文件)。所以 3 个视图(iPhone、iPad、子视图)中的每一个都有自己的控制器,这意味着这些控制器是这些视图的文件所有者。
但是当我用代码加载子视图时:
NSArray *nibContents = [[NSBundle mainBundle] loadNibNamed:@"subview" owner:self options:nil];
并将其作为子视图添加到 iPad/iPhone 视图,存在问题,因为此子视图包含标签的 IBOutlets,而此标签位于子视图控制器中,而不是 iPhone/iPad 控制器中。
然后显示此错误:
由于未捕获的异常“NSUnknownKeyException”而终止应用程序,原因:“[<__nscfconstantstring> setValue:forUndefinedKey:]:此类与键视图的键值编码不兼容。”
我该如何解决这个问题?我试图将 @"subviewController" 作为所有者,但它没有帮助。谢谢。
编辑!!: 所以我试图解决这个问题,但它仍然不起作用。这是一个新情况:
子视图控制器是子视图的所有者,但根视图的自定义类是一个包含插座的类(派生自 UIView)。
如果我在 iPad/iPhone 控制器所有者:@“subviewController”,我得到这个错误:
由于未捕获的异常“NSUnknownKeyException”而终止应用程序,原因:“[<__nsobject> setValue:forUndefinedKey:]:此类与键视图的键值编码不兼容。”
视图是子视图控制器的属性。现在告诉我问题出在哪里。我真的很绝望!
或者如果我有 owner:self,则会打开一些带有说明的窗口并出现 EXC_BAD_ACCESS 错误。
【问题讨论】:
-
两个问题:1) `NSArray *nibContents = ` 行在哪个类中执行(即 self 的值是多少)和 2) 异常在哪里触发?要找出在 'throw' 上设置异常断点。
-
1) 取决于启动应用程序的设备。 Self 是 ViewController_iPad 或 ViewController_iPhone。 2) 在 loadNibNamed 行中触发异常。
标签: ios subview iboutlet addsubview