多个笔尖,多个IBOutlet,一个控制器。获得无法识别的选择器?

时间:2014-11-04 21:57:31

标签: objective-c macos

我有三个笔尖和一个SetupController类。在界面构建器中,所有nib都将File的Owner设置为“SetupController”。

在SetupController头文件中我有

@property (strong) IBOutlet NSTextField *label;     //Nib one (Created with SetupController)
@property (strong) IBOutlet NSTextField *label2;    //Nib three

在m文件中我有:

@implementation SetupController

@synthesize label = _label;
@synthesize label2 = _label2;

现在,当我尝试使用[_label2 setStringValue:@“String”]更新label2的NSTextField时,没有任何反应。打开调试我看到_label2为null,但_label不是。

使用initWithNibName在ViewController中加载第二个和第三个nib(我无法更新):@“NIB”包:nil;

以这种方式加载笔尖是不是正确加载插座?由于这些出口在SetupController中实例化,并且我将新视图作为新的ViewController加载,它们是否未正确加载?

全部谢谢!

1 个答案:

答案 0 :(得分:1)

如果这些@property声明在Nib 1和Nib的文件所有者类中,并且该类的同一个实例加载了两个nib,那么它们可能都是非零的。那就是catch-22,因为你说你在NSViewController子类中使用init函数来加载nib。每个VC只能初始化一次,只管理一个视图,而不是两个视图。

因此,标签属性为非零的VC实例必须已使用“Nib one”初始化。 label2是nil,因为您认为它是NSTextField的出口不在“Nib one”中。加载Nib时,IBoutlet会指向视图对象,并且在加载Nib时没有任何内容可供label2指向。

您必须在加载“Nib three”的VC实例中将label2作为插座。这通常是与加载“Nib one”的VC不同的类,虽然我不知道你不能有两个具有相同文件所有者类的nib,其中的出口是nil,取决于nib的每个实例的nib VC类加载。

相关问题