Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Objective c 事件处理程序(cocoa应用程序)内的NULL属性_Objective C_Macos_Cocoa_Event Handling_Iboutlet - Fatal编程技术网

Objective c 事件处理程序(cocoa应用程序)内的NULL属性

Objective c 事件处理程序(cocoa应用程序)内的NULL属性,objective-c,macos,cocoa,event-handling,iboutlet,Objective C,Macos,Cocoa,Event Handling,Iboutlet,我有一个包含几个iBotlet的类: @interface MainDreamer : NSWindow <NSWindowDelegate> { IBOutlet NSTextField *dreamField; IBOutlet NSTableView *dreamTable; IBOutlet NSImageView *dreamview; IBOutlet NSMutableArray *dreamlist; IB

我有一个包含几个iBotlet的类:

@interface MainDreamer : NSWindow <NSWindowDelegate>
{    
    IBOutlet NSTextField *dreamField;
    IBOutlet NSTableView *dreamTable;    
    IBOutlet NSImageView *dreamview;

    IBOutlet NSMutableArray *dreamlist;  
    IBOutlet NSMutableArray *dataset;
}
它们全部变成空值


如何访问事件处理程序内部的IBOutlets?

如果
mouseUp
是MainDreamer对象中的一个方法,则属性应该可用。是否确定已正确连接Interface Builder中的所有插座?尝试将其添加到对象中:

- (void)awakeFromNib {
    NSLog("table: %@", dreamTable);
    NSLog("view: %@", dreamview);
    NSLog("dataset: %@", dataset);
}
如果它们为
null
则未正确连接

如何在事件处理程序中访问IBOutlets

你已经有了。outlet只是实例变量(或属性,如果您将它们声明为实例变量);没有什么特别的出口或响应方法,导致一个工作在另一个

那么,为什么您的插座在代码的某些部分显示为连接,而在其他部分显示为保持
nil

通常,这是因为您在nib中创建了一个MainDreamer对象,并在代码中创建了一个,或者您在两个单独的nib中创建了它

无论哪种方式,都会使两个对象属于同一类。它们不是同一个对象,一个连接了插座,另一个没有。您正在单击的不是您在nib(或其中一个nib)中创建和连接的那个

证明这一点的方法是将
self
记录在
mouseUp:
方法中,以及您发现要连接插座的任何位置。我希望你能找到不同的
self
:正如我所说的,两个对象


解决方案是删除其中一个实例,并将其所有用途改为使用另一个实例。如果要在代码中创建一个对象,则应删除该对象,以支持nib中的对象。

是否实现了任何其他NSResponder鼠标方法(例如
mouseMoved:
mouseDown:
)你在那里看到了同样的问题吗?我加上了mouseDown-同样的情况那里连接正确,我可以从程序的任何部分处理它们,除了事件句柄你完全正确!我删除了一个对象,但仍然存在一个问题:我在
IBOutlets
之间画了线,但我无法在“
窗口
”和
视图
之间画线,因此
applicationdFinishingLaunching
方法不起作用launch@IlyaBlokh:“方法不启动”没有意义。无论您连接了什么出口(除了应用程序的
委托
出口),都将调用该方法。至于无法将
窗口
连接到视图:正确;windows不是(Mac上的)视图。您可能应该在笔尖中创建一个窗口,将视图放入其中,然后将插座连接到窗口。
- (void)awakeFromNib {
    NSLog("table: %@", dreamTable);
    NSLog("view: %@", dreamview);
    NSLog("dataset: %@", dataset);
}