2009-07-02 12 views
0

Der Fehler, den ich bekommen ist Xcode sagen 3 Dinge sind un-deklarierten (Bild unten sehen) alt text http://snapplr.com/snap/ks4hWarum gibt Xcode mir diese Fehler?

Aber in der Header-Datei ich sie

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

erklärt haben (Bild unten sehen) Warum Ich bekomme diese Fehler, wenn ich sie erklärt habe.

Der vollständige Code:

Header-Datei.

#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 

Implementierungsdatei

#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 

Antwort

4

Sie haben würde mehr der Datei sicher sein, zu zeigen. Importieren Sie die Headerdatei ordnungsgemäß? Haben Sie die Header-Datei gespeichert?

Versuchen Sie, die expliziten Selbst-> Verweise einzufügen, und Sie erhalten möglicherweise eine aufschlussreichere Fehlermeldung.

Versuchen Sie auch, die Implementierungsdatei (im Menü Erstellen) vorzuverarbeiten, und dies könnte zeigen, warum der ivar nicht gefunden wird.

+0

Wie würden Sie die Implementierungsdatei vorverarbeiten? Ich habe auch die Frage mit dem vollen Code aktualisiert. – Joshua

+0

Ich habe es vorverarbeitet, aber es ist nur eine Ladung Code. – Joshua

+0

Der zusätzliche Kontext, den Sie hinzugefügt haben, ist sofort hilfreich. Verweise auf die Ivars müssen sich innerhalb der Objective-C-Methodendefinitionen befinden, da der implizite Selbstparameter benötigt wird, um auf sie zuzugreifen. Sie können dies offensichtlich nicht tun, da Sie eine Carbon Callback-Funktion implementieren. Wenn Sie jedoch den Parameter userData als Zeiger auf Ihren HotKeyController definieren, sollten Sie auf diese Weise darauf zugreifen können. – kperryua

6

Der Fehler, den ich bekommen ist Xcode sagen 3 Dinge sind un-deklarierten ...

Aber in der Header-Datei ich ihnen erklärt haben ...

Warum erhalte ich diese Fehler, wenn ich ihnen erklärt haben [ in der HotKeyController-Klasse].

Da diese Zeilen in einer Funktion sind, nicht in einer Methode der HotKeyController-Klasse. Es spielt keine Rolle, wo Sie die Funktion setzen (innerhalb @implementation oder nicht); Es ist immer noch eine Funktion, keine Methode.

Wie würde ich den Parameter userData auf meinen HotKeyController stellen?

Sie legen das fest, wenn Sie den Ereignishandler erstellen. In der Tat, Sie setzen es bereits auf "pl", was auch immer das ist.

+0

Ah, ich verstehe. Die Sache ist, ich habe den Code von einem Tutorial. In der Tat ist "pl" auch nicht deklariert. Weißt du, was ich ändern sollte? – Joshua

+0

Sie wollten es in den HotKeyController ändern, erinnern Sie sich? –

+0

Also ändere ich es in HotKeyController richtig? – Joshua

0

NSWindow ist nicht im Foundation-Framework definiert, Sie müssen die richtigen Header, ApplicationKit oder Cocoa importieren.

+0

Falls Sie die AppKit Header importieren würde seine Instanzvariablen nicht dazu führen, abhanden . Sein Problem ist, dass er versucht, von einer Funktion aus auf sie zuzugreifen. –

Verwandte Themen