2009-07-02 20 views
0

私が手にエラーが3つの物事は非宣言されていると言ってXcodeは alt text http://snapplr.com/snap/ks4hXcodeでこれらのエラーが表示されるのはなぜですか?

を(写真の下を参照)しかし、私はそれらを宣言しているヘッダーファイルに(写真の下を参照)である

alt text http://snapplr.com/snap/htmb

なぜ私はそれらを宣言したときに私はこれらのエラーを取得しています。

フルコード:

ヘッダーファイル。

#import <Foundation/Foundation.h> 


@interface HotKeyController : NSObject { 
    IBOutlet NSButton *cmdHK; 
    IBOutlet NSButton *ctrHK; 
    IBOutlet NSButton *optHK; 
    IBOutlet NSPopUpButton *keyHK; 
    IBOutlet NSWindow *window; 
    IBOutlet NSWindow *searchWindow; 
    IBOutlet NSWindow *entryWindow; 
} 

@end 

実装ファイル

#import "HotKeyController.h" 
#include <Carbon/Carbon.h> 

@implementation HotKeyController 

OSStatus MyHotKeyHandler(EventHandlerCallRef nextHandler,EventRef theEvent,void *userData) 
{ 
    EventHotKeyID hkCom; 
    GetEventParameter(theEvent,kEventParamDirectObject,typeEventHotKeyID,NULL,sizeof(hkCom),NULL,&hkCom); 
    int l = hkCom.id; 

    switch (l) { 
     case 1: [window makeKeyAndOrderFront:NSApp]; 
      break; 
     case 2: [searchWindow makeKeyAndOrderFront:nil]; 
      break; 
     case 3: [entryWindow makeKeyAndOrderFront:nil]; 
      break; 
    } 
    return noErr; 
} 

- (void)awakeFromNib 
{ 
    //Register the Hotkeys 
    EventHotKeyRef gMyHotKeyRef; 
    EventHotKeyID gMyHotKeyID; 
    EventTypeSpec eventType; 
    eventType.eventClass=kEventClassKeyboard; 
    eventType.eventKind=kEventHotKeyPressed; 


    InstallApplicationEventHandler(&MyHotKeyHandler,1,&eventType,pl,NULL); 

    gMyHotKeyID.signature='htk1'; 
    gMyHotKeyID.id=1; 
    if([[NSUserDefaults standardUserDefaults] integerForKey:@"hotkeyShowMain"]!=-999) { 
     RegisterEventHotKey([[NSUserDefaults standardUserDefaults] integerForKey:@"hotkeyShowMain"], [[NSUserDefaults standardUserDefaults] integerForKey:@"hotkeyShowMainModifier"], gMyHotKeyID, GetApplicationEventTarget(), 0, &gMyHotKeyRef); 
    } 

    gMyHotKeyID.signature='htk2'; 
    gMyHotKeyID.id=2; 
    if([[NSUserDefaults standardUserDefaults] integerForKey:@"hotkeyShowSearch"]!=-999) { 
     RegisterEventHotKey([[NSUserDefaults standardUserDefaults] integerForKey:@"hotkeyShowSearch"], [[NSUserDefaults standardUserDefaults] integerForKey:@"hotkeyShowSearchModifier"], gMyHotKeyID, GetApplicationEventTarget(), 0, &gMyHotKeyRef); 
    } 

    gMyHotKeyID.signature='htk3'; 
    gMyHotKeyID.id=3; 
    if([[NSUserDefaults standardUserDefaults] integerForKey:@"hotkeyShowEntry"]!=-999) { 
     RegisterEventHotKey([[NSUserDefaults standardUserDefaults] integerForKey:@"hotkeyShowEntry"], [[NSUserDefaults standardUserDefaults] integerForKey:@"hotkeyShowEntryModifiers"], gMyHotKeyID, GetApplicationEventTarget(), 0, &gMyHotKeyRef); 
    } 

} 

@end 

答えて

4

あなたは確認するために、ファイルの多くを示さなければならないでしょう。ヘッダーファイルを正しくインポートしていますか?ヘッダーファイルを保存しましたか?

明示的なself-> referencesを挿入してみると、より明白なエラーメッセージが表示されることがあります。

また、(ビルドメニューの)インプリメンテーションファイルを前処理してみると、なぜivarが見つからないのか分かります。私が手にエラーがXcodeの3つの物事は非宣言されていると言っている

+0

どのように実装ファイルを事前処理しますか?私も完全なコードで質問を更新しました。 – Joshua

+0

私はそれを前処理しましたが、単なるコードのロードです。 – Joshua

+0

追加した追加のコンテキストはすぐに役立ちます。 ivarsへの参照は、Objective-Cのメソッド定義内になければなりません。なぜなら暗黙的なselfパラメーターがそれらにアクセスするために必要であるからです。 Carbonコールバック関数を実装しているので、明らかにこれを行うことはできません。ただし、userDataパラメータをHotKeyControllerのポインタにすると、そのようにアクセスすることができます。 – kperryua

6

...

しかし、私はそれらを宣言しているヘッダファイルで

...

私はそれらを[宣言したとき、私は、これらのエラーを取得していますなぜHotKeyControllerクラス内]。

これらの行は、HotKeyControllerクラスのメソッドではなく、関数内にあるためです。関数をどこに置くかは関係ありません(@implementationの中でもそうでなくてもかまいません)。それはまだ関数であり、メソッドではありません。

userDataのパラメータポイントを私のHotKeyControllerにするにはどうすればよいですか?

イベントハンドラを作成するときに設定します。実際には、それは既に "pl"に設定されています。

+0

ああ、そうだ。私はチュートリアルからコードを取得しています。実際には "pl"も宣言されていません。私はそれを何に変更すべきか知っていますか? – Joshua

+0

HotKeyControllerに変更したかったのですが、覚えていますか? –

+0

だから私はそれをHotKeyControllerに変更しますか? – Joshua

0

NSWindowがFoundationフレームワークで定義されていない場合は、 右のヘッダApplicationKitまたはCocoaをインポートする必要があります。

+0

AppKitヘッダーのインポートに失敗しても、インスタンス変数が失われることはありません。彼の問題は、彼が機能からそれらにアクセスしようとしていることです。 –

関連する問題