0

メソッドを使用してprefwindowを表示しようとしているコードがいくつかありますが、残りを切り取り、windowinitと他のメソッドを残しました。では、メソッド間でオブジェクトにアクセスするにはどうすればよいでしょうか。

#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

main関数内の「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 に答える