【问题标题】:Global variable getting dereferanced全局变量被取消引用
【发布时间】:2014-07-08 16:30:45
【问题描述】:

我有一个名为 NSTableView *dataTableViewGlobal; 的全局变量,我将它存储在一个名为 g 的 c++ 结构中。

我有一个名为WindowNSViewController 子类,它有一个与之关联的笔尖,并在我的程序加载时创建。现在Window.h 看起来像这样:

@interface Window : NSViewController{

    IBOutlet NSButton* button; 

}

@property (retain, readwrite) IBOutlet NSTableView *dataTableView;

-(IBAction) click :(id) sender;

Window.m 看起来像这样:

@synthesize dataTableView;

-(void) awakeFromNib {

    g->dataTableViewGlobal =  self.dataTableView;
    [g->dataTableViewGlobal  setBackgroundColor: NSColor.redColor];
}

-(IBAction) click :(id) sender {

    [ g->dataTableViewGlobal setBackgroundColor: NSColor.blueColor];

    return;
}

我目前遇到的问题(除了使用全局变量之外)是我能够使用dataTableViewGlobalawakeFromNib 期间更改作为我笔尖一部分的 NSTAbleView 的颜色,但是当我尝试更改click 中的颜色没有任何反应。

我打算在与Window 同时创建的其他 nib 中使用全局变量。我更愿意做的是拥有 Window 的对象,其中包含 Window 的当前实例,我在我的代码中需要它,但我不知道该怎么做。

【问题讨论】:

    标签: macos cocoa nib objective-c++


    【解决方案1】:

    问题可能是您的 IBAction 未正确连接到按钮。所以只要确保它应该正确连接到按钮。

    之后修改下面的动作方法:-

    -(IBAction) click :(id) sender 
    {
        g->dataTableViewGlobal =  self.dataTableView;
        [ g->dataTableViewGlobal setBackgroundColor: NSColor.blueColor];
    }
    

    【讨论】:

    • 我的 IBAction 很好。如果我在click 中使用dataTableView,一切都很好。
    • 您是否在您的操作方法中尝试了这两行? g->dataTableViewGlobal = self.dataTableView; [g->dataTableViewGlobal setBackgroundColor: NSColor.redColor];
    • g->dataTableViewGlobal = self.dataTableView; 添加到我的操作方法可以更改颜色,但我想在当前类之外使用dataTableViewGlobal,因此我无法将其设置为self.dataTableView
    猜你喜欢
    • 1970-01-01
    • 2010-09-09
    • 1970-01-01
    • 1970-01-01
    • 2012-01-27
    • 1970-01-01
    • 2017-09-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多