如何以编程方式初始化nib值

时间:2011-12-25 04:21:48

标签: objective-c xcode macos cocoa

我正在尝试以编程方式初始化视图内部的值(在nib文件中创建)。 我会尝试对我的场景做一点简要介绍:

我有一个nib文件,里面有一个视图。此视图包含一些项目(TextViews,CheckBox等)

这个视图假装是我的程序中包含新数据的模板(它不是主视图)。这是视图的窗口初始化:

NewWindow = [[NSWindow alloc] initWithContentRect:frame
                                        styleMask:( NSBorderlessWindowMask| NSClosableWindowMask | NSTitledWindowMask) 
                                          backing:NSBackingStoreBuffered
                                            defer:NO];
[NewWindow setIsVisible:NO];
[NewWindow setReleasedWhenClosed:NO];
[NewWindow setBackgroundColor:[NSColor windowBackgroundColor]];
[NewWindow setContentView: MyView];
[NewWindow setDelegate:self];

我把窗户叫做可见。

MyView是一个IBOutlet连接到笔尖的视图。这个视图是一个修改过的NSView,它有自己的类文件。

视图上的所有内容(IBOutlets)已连接并正常工作(我知道,因为例如,当我单击按钮时,与其相关的操作工作正常)。

我在MyViews类上创建了一个初始化方法,根据我的需要初始化模板的字段。我称之为初始化:

[MyView initialize:InitClass];

我面临的问题是,这个MyView对象与nib文件中的对象不同,即使连接了所有连接(IBOutlets)。然后,当我运行此方法时,没有任何反应(因为initialize方法正在尝试更改未分配字段的值)。

我已经包含了一些NSLog来查看我的对象地址,并确认nib文件中的那个与IBOutlet上的那个不同

我正在创建这样的IBOutlet属性:

@property (assign) IBOutlet MyNewView *MyView;

有谁知道如何解决这个问题?

1 个答案:

答案 0 :(得分:1)

  1. 您永远不应该致电viewWillMoveToWindow:。这是一个信息终身事件。

  2. 您似乎没有显示足够的代码。我没有看到任何证据表明你正在加载笔尖。当然,如果通过调用[[MyView alloc] init]或类似实例来实例化MyView,那就是另一个MyView。如果您希望插座指向笔尖中的插座,则需要将自己的笔尖作为所有者加载。