0

我有一些代码试图用一种方法显示我的 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
4

2 回答 2

1

您无权访问主函数内“hello”类的“prefwindow”变量。它超出了范围。为了改变变量,我相信你会想写

self.prefwindow = ...
于 2013-03-08T08:45:48.563 回答
0

id prefwindow =您一起声明一个名为prefWindow. 如果您想使用您在标题中声明的那个,请不要再次声明它。只做:

prefwindow = [[[NSWindow alloc] initWithContentRect:NSMakeRect(0, 0, 350, 150)
                                             styleMask:(NSTitledWindowMask | NSClosableWindowMask) backing:NSBackingStoreBuffered defer:NO]
                 autorelease];

您所做的只是声明一个新对象,其名称与您在标题中声明的对象相同。

于 2013-03-08T08:22:25.520 回答