我应该用c方法创建一个ac类,它是由objective-c和使用cocoa组成的,但是现在我遇到了一个问题,根本无法理解它,因为我对目标很新-C.还有一点是我应该能够从c创建窗口和按钮.因此,当我构建并运行此程序时,它会启动,但会立即变为“无响应”状态.无论如何,这是我得到的:
在window.h
#ifndef WINDOW_H
#define WINDOW_H
class Window {
public:
Window();
void createButton();
};
#endif
Window.mm
#include "Window.h"
#include "Button.h"
Window::Window(){
NSWindow *window = [[NSWindow alloc]
initWithContentRect: NSMakeRect(100, 100, 200, 200)
styleMask: NSTitledWindowMask | NSMiniaturizableWindowMask
backing: NSBackingStoreBuffered
defer: NO];
[window setTitle: @"Test window"];
}
void Window::createButton(){
Button *button;
[[this contentView] addSubView: button];
// word this gives warning: no '-addSubView:' method found
// this is probably causing the problem I have
}
Button.h
class Button{
Button();
};
// There will be more methods here eventually
Button.mm
#include "Button.h"
Button::Button(){
NSButton *button = [[NSButton alloc]
initWithFrame: NSMakeRect(14, 100, 120, 40)];
[button setTitle: @"Hello world"];
[button setAction: @selector(invisible)];
[button setBezelStyle: NSRoundedBezelStyle];
[button setButtonType: NSMomentaryLightButton];
[button setBezelStyle: NSTexturedSquareBezelStyle];
}
Main.cpp的
#include "Window.h"
#include "Button.h"
int main(int argc, char *argv[]){
Window x;
x.createButton();
}
所以,有没有人知道为什么它不起作用,就像我提到的,我是Cocoa和Objective-C的新手,还在学习:P
是的,我试图解决它.
解决方法:
[[this contentView] addSubView:button];
正如您所怀疑的那样,这会导致您的问题. “这”并不是指窗户;它指的是班级本身. (请记住,您的班级不是NSWindow的子类)
一种选择是在标题中声明您的NSWindow,以便可以全局使用.所以制作标题:
#ifndef WINDOW_H
#define WINDOW_H
class Window {
public:
Window();
void createButton();
NSWindow *window;
};
#endif
然后将上述行更改为:
[[window contentView] addSubview:button]; (另请注意修复’addSubview’的大小写)
这与你的按钮构造函数有类似的问题.您正在创建一个NSButton,但该按钮永远不会再被看到或听到.