Jump to content

kutte

Members
  • Gesamte Inhalte

    5
  • Benutzer seit

  • Letzter Besuch

Posts erstellt von kutte

  1. Hi Manni,

     

    die refToSelf Variante funktioniert bei mir, Dir fehlt bestimmt nur eine Zuweisung...bei mir siehts so aus.

     

    1. Definition der Zeiger und der Callback-Methode (den Typecast (id) nicht vergessen) in der .m Datei (AppDelegate.m)

    Dann bist Du die "Implicit conversion" Meldung los...

     

    #import "AppDelegate.h"

     

    void * refToLinearPotiSlider;

    void * refToLinearPotiText;

     

    void cb_lp_position(uint16_t position) {

        //NSLog(@" %@", @"callback from linearpoti...");

        [(id)refToLinearPotiSlider setIntegerValue: position];

        [(id)refToLinearPotiText setIntegerValue: position];

    }

     

    @implementation AppDelegate

     

    2. Die Zeiger auf die GUI Elemente in dieser Methode zuweisen (AppDelegate.m). Ich setze einen Slider und ein Textfeld (IBOutlets).

     

    - (void)applicationDidFinishLaunching:(NSNotification *)aNotification

    {

        // Insert code here to initialize your application

        refToLinearPotiSlider = linearpoti_slider;

        refToLinearPotiText = linearpoti_text;

    }

     

    3. Registrierung der CallBack Methode in Deinem Code

     

        linear_poti_register_callback(&lp, LINEAR_POTI_CALLBACK_POSITION, cb_lp_position);

     

    das ruft die CallBack Methode wenn ich mien Poti bewege und setzt dann den Wert im GUI (Slider & Textfeld).

     

    Gruss kutte

  2. Erklärung:

    C Funktionen sind ausserhalb der @implementation einer Objective-C (.m) Datei deklariert.

     

    int MyCFunction(int num, void *data)

    {

        //code here...

    }

     

    @implementation

     

    - (void)MyObjectiveCMethod:(int)number withData:(NSData *)data

    {

          //code here

    }

     

    @end

    Da die C Funktion ausserhalb der @implementation ist, kann Sie keine Methoden aufrufen wie z.B.

     

    [self doSomething]

     

    und hat keinen Zugriff auf Instanz Variablen.

     

    Lösung:

    In der @implementation einen Zeiger definieren (refToSelf) und den Zeiger z.B. inder init() zuweisen. Nun ist im CallBack das Objekt sichtbar...

     

    void * refToSelf;

    int cCallback()

    {

        [refToSelf someMethod:someArg];

    }

     

    @implementation SomeClass

    - (id) init

    {

        self = [super init];

        refToSelf = self;

    }

    - (void) someMethod:(int) someArg

    {

    }

  3. Hallo,

     

    ich hab ein Problem mit den C Bindings in Xcode innerhalb einer registrierten Callback Funktion für das LinearPoti Bricklet.

     

    void cb_lp_position(uint16_t position) {

        [linearpoti setIntegerValue: position];

    }

     

    die Variable "linearpoti" (referenziert einen NSSlider) ist nur innerhalb dieser callback Methode nicht sichtbar (undeclared indentifier). Die Variable ist jedoch ordnungsgemäß definiert  und in jeder anderen Obj-C Methode sichtbar.

    Hat jemand vielleicht ein Beispiel, in dem in Xcode mit Callbacks gearbeitet wird und in der Callback Methode ein GUI Objekt referenziert wird?

     

    Danke vorab - kutte  :)

     

×
×
  • Neu erstellen...