我有一些代码,我试图用方法显示我的prefwindow,但我剪掉了其余部分并离开了窗口init和另一种方法。那么我如何跨方法访问对象?
#import <Foundation/Foundation.h>
#import <Cocoa/Cocoa.h>
@interface hello : NSObject <NSApplicationDelegate> {
NSWindow *prefwindow;
}
@property (assign) IBOutlet NSWindow *window;
-(void)openPrefs;
@end
@implementation hello;
@synthesize window;
int main (int argc, const char * argv[]) {
hello *self = [[hello alloc] init];
[NSAutoreleasePool new];
[NSApplication sharedApplication];
id prefwindow = [[[NSWindow alloc] initWithContentRect:NSMakeRect(0, 0, 350, 150)
styleMask:(NSTitledWindowMask | NSClosableWindowMask) backing:NSBackingStoreBuffered defer:NO]
autorelease];
[prefwindow center];
[prefwindow setTitle:appName];
[prefwindow setDelegate:self];
[self openPrefs];
[NSApp setDelegate:self];
[NSApp run];
return 0;
}
-(void)openPrefs {
[NSApp activateIgnoringOtherApps: YES];
[prefwindow makeKeyAndOrderFront: self];
}
@end
答案 0 :(得分:1)
您无法访问main函数中“hello”类的“prefwindow”变量。它超出了范围。为了改变变量,我相信你会想写
self.prefwindow = ...
答案 1 :(得分:0)
使用id prefwindow =
,您将声明一个名为prefWindow
的新对象。如果要使用标头中声明的那个,请不要再声明它。只做:
prefwindow = [[[NSWindow alloc] initWithContentRect:NSMakeRect(0, 0, 350, 150)
styleMask:(NSTitledWindowMask | NSClosableWindowMask) backing:NSBackingStoreBuffered defer:NO]
autorelease];
您所做的只是声明一个新对象,其名称与您在标题中声明的对象相同。