Meine Probleme ... :)

  • Original von Josef
    Ich bin ca 40 und auch noch Anfänger! :D

    cu
    Josef


    wir sind alle anfaenger immer wieder. aber ab einem gewissen alter hat man gelernt sich in einem forum "anstaendig" zu benehmen und strukturierte Fragen zu stellen ;)
    malloc: *** vm_allocate(size=1665622016) failed (error code=3)
  • Ok, da wir schon beim verbessern sind, wie würdet denn ihr das hier schreiben :

    - (IBAction)on_off:(id)sender
    {// ON / OFF
    if ([switchText stringValue] != @"On")
    {
    [switchText setStringValue:@"On"];
    }
    else if ([switchText stringValue] != @"Off")
    {
    [switchText setStringValue:@"Off"];
    }// END ON / OFF


    :) damit ich gleich ma was verbesserndes lernen kann :D
    AiM: damnedinwhite
    MsN: killer_and_mouse@hotmail.com
    IcQ:262406127
  • Original von knuRr
    Ok, da wir schon beim verbessern sind, wie würdet denn ihr das hier schreiben :

    - (IBAction)on_off:(id)sender
    {// ON / OFF
    if ([switchText stringValue] != @"On")
    {
    [switchText setStringValue:@"On"];
    }
    else if ([switchText stringValue] != @"Off")
    {
    [switchText setStringValue:@"Off"];
    }// END ON / OFF


    :) damit ich gleich ma was verbesserndes lernen kann :D


    ich hatte es weiter oben schon gesagt, du solltest die string methode isEqualToSring verwenden wenn du 2 strings miteinander vergleichen willst.
  • [Gelöscht und Hinweis auf oben] Ich nehme an, dass du einen Button hast, dessen Text auf On/Off switchen soll und das fragst du dort ab. Ich will jetzt nichts vom Zaun brechen, was HIG angeht. Meines Erachtens wäre es besser, einen Button zu haben, der "Run" symbolisiert und der dann gedrückt bleibt. Immerhin kann man den Button nicht mehr klicken, wenn er auf "Off" umgeschalten ist. Kann man aber sicher auch anders sehen.

    Das Problem im Code bei dir ist, dass du später eine while-Schleife hast. Die blockt dein Programm. Deshalb solltest du wohl einen Thread starten.
    Es hat noch nie etwas gefunzt. To tear down the Wall would be a Werror!
    25.06.2016: [Swift] gehört zu meinen *Favorite Tags* auf SO. In welcher Bedeutung von "favorite"?
  • Original von Tom9811
    Uuuuuups, ist mir gar nicht aufgefallen. Einverfreilich muss er das. So geht das in die Hose.


    Hmn... also ... wie wir alle schon wissen bin ich blöd... wie würde das dann mit isEqualToString aussehen ?

    so ? :

    if ([switchText stringValue] isEqualToString @"On")
    {
    }

    würde mich wundern da ich wenn ich das mache einen error bekomme :sick:

    Naja... nein es ist kein Button sondern ein NSTextField.
    Ich habe einen Switch ( NSButton ) Platziert aber keinen text dahinter, mit absicht !
    Dann hab ich ein System Font Text dings genommen ( NSTextField ) und habs hinter den Switch Button gepackt... dann hatte ich erst :

    if ([switchText stringValue] == @"On")
    {
    [switchText setStringValue:@"Off"]
    }

    -- Das hat aber wiederum nich geklappt, hat irgendwie das @"On" nicht erkannt ... auf jedenfall hab ich das ganze einfach umgedreht :

    if([switchText stringValue] != @"Off")
    {
    [switchText setSTringValue:@"Off"]
    }

    und siehe da es funzt ^^

    Sobald der Switch betätigt wird wird gecheckt ob es entweder nicht "Off" oder nicht "On" is und dann das content des text feldes entsprächend gesetzt :)
    -- immernoch falsch ?( :rolleyes:

    EDIT : Das While dingens hintendran is schon längst weg, seitdem ich das programm einmal gestartet hab und es dann "Seltsamerweise" ;) sich aufgehängt hat. Na ja jetz krieg ich hier NSThread entgegengeworfen und weiss nich was mit anfangen .. hab in der Documentation schon gesucht... bin auch fündig geworden aber ich muss mich erst noch da reinarbeiten um zu kappieren was das alles is... also vllt könnt ich dazu ne erklärung bekommen ? wäre nett :D
    AiM: damnedinwhite
    MsN: killer_and_mouse@hotmail.com
    IcQ:262406127
  • Du hast dir wirklich den verlinktn Artikel durchgelesen? ;)

    Quellcode

    1. if ([switchText stringValue] isEqualToString:@"On")


    Folgt ein Parameter, so ist der Parameter zu beschreiben, ein Doppelpunkt zu setzen, in runden Klammern der Datentyp anzugeben und schließlich der Name des formalen Parameters:
    - (int)countNonAsciiInString:(NSString)aString;
    Folgen mehrere Parameter so ist nach einem Leerzeichen so fortzufahren:
    - (NSString*)keyForObject:(id)anObject inDictionary:(NSDictionary*)aDic;
    Allerdings müssen weitere Parameter nicht benannt sein. Man sollte von dieser Möglichkeit aber tunlichst keinen Gebrauch machen, auch wenn anfänglich die Verwendung sehr langer Methodennamen ungewohnt ist.
    Es hat noch nie etwas gefunzt. To tear down the Wall would be a Werror!
    25.06.2016: [Swift] gehört zu meinen *Favorite Tags* auf SO. In welcher Bedeutung von "favorite"?
  • Quellcode

    1. (IBAction)on_off:(id)sender
    2. {
    3. if ([[switchText stringValue] isEqualToString:@"On"]) // die aeusseren Klammern sind wichtig
    4. [switchText setStringValue:@"On"];
    5. else if ([[switchText stringValue] isEqualToString:@"Off"])
    6. [switchText setStringValue:@"Off"];
    7. }


    Das erstmal zu den Snippet, zu dem while() was du vorhin noch hattest:
    Du kannst einen Timer starten, der dann wenn der Button (dass die Methode durch einen Button ausgeloest wird ist doch richtig?!) an ist immer eine bestimmte Methode aufruft. Also z. B.

    Quellcode

    1. -(void)awakeFromNib
    2. {
    3. NSTimer *myTimer = [NSTimer scheduledTimerWithTimeInterval:0.01 // das Ding wird also alle 0.01 Sek aufgerufen
    4. target:self // in dem Objekt ist die Methode die aufgerufen werden soll
    5. selector:@selector(moveMyMice:) // methode die aufgerufen werden soll
    6. userInfo:nil
    7. repeats:YES];
    8. }
    9. -(void)moveMyMice:(NSTimer*)theTimer
    10. {
    11. if([theButton state])
    12. // move the mice
    13. else
    14. return;
    15. }
    Alles anzeigen


    Ich hoffe, dass es das ist, was du machen wolltest ;) Der Timer umgeht einen neuen Thread und irgendwie mag ich Timer...

    Neum -- der noch mal zwei Jahre juenger ist ;)

    UPDATE: Es muss scheduledTimerWithTimerInterval:target:selector:userInfo:repeats: sein.
    "We can make all our dreams come true, but first we have to decide to awaken from them.", Josephine Baker
  • Nein, bei isEqualToString hatte ich bis jetz noch gar nich gesucht :P ... naja hätte ich vllt auch noch in erwägung ziehen könne ( guck mal das edit vom vorherigen post an )

    ZUSATZ : Danke Neum !! Das hatte ich gesucht ^^ ( unter anderem :D ) aber genial :D
    AiM: damnedinwhite
    MsN: killer_and_mouse@hotmail.com
    IcQ:262406127
  • Bei Threads laufen zwei Teile deines Programmmes unahängig nebeneinander. Man nutzt das gerne, wenn eine Operation llange dauert und das Programm bedienbar bleiben soll. Kennst du irgendwoher?

    Das grundsätzliche Problem von Threads ist das synchronisieren. Die dürfen nämlihc nicht kreuz und quer Daten veränndern. Das ist aber in der Tat sehr kompliziert.

    Anders sieht es bei den Timern aus, die über die so genannte Run-Loop laufen. Die kannst du dir in der Tat wie einen regelmäßigen Button-Klick des Systems vorstellen. Der Vorteil ist, dass du keine Nebenläufigkeit hast und damit keine Probleme mit der Synchronisation. Der Nachteil ist, dass weiterhin eine Blockade auftreten kann. Deine Timer-Methode muss also recht schnell sein, sonst blockt sie wieder. Auch kann während der Timer-Methode wieder niemmand auf etwas klicken.
    Es hat noch nie etwas gefunzt. To tear down the Wall would be a Werror!
    25.06.2016: [Swift] gehört zu meinen *Favorite Tags* auf SO. In welcher Bedeutung von "favorite"?
  • Ok 1 Frage hätte ich noch dazu... dann mach ich für heute schluss ...

    Wenn ich das ganze so reinschreib :

    Quellcode

    1. - (void)awakeFromNib
    2. {
    3. int SldPos;//Slider
    4. SldPos = [valueSlider intValue];//is
    5. [valueField setIntValue:SldPos];//Moving - Action
    6. //DAS IST IM MOMENT IRRELEVANT -----
    7. NSTimer *myTimer = [NSTimer timerWithTimeInterval:0.01 // das Ding wird also alle 0.01 Sek aufgerufen
    8. target:self // in dem Objekt ist die Methode die aufgerufen werden soll
    9. selector:@selector(moveMyMice:) // methode die aufgerufen werden soll
    10. userInfo:nil
    11. repeats:YES];
    12. }
    13. -(void)moveMyMice:(NSTimer*)theTimer
    14. {
    15. if([toggle_Switch state])
    16. {
    17. // move the mice
    18. }
    19. else
    20. {
    21. return;
    22. }
    23. }
    Alles anzeigen


    dann bringt er mir ein warning das besagt dass "My Timer" nicht benutz wird ( unused variable `myTimer' )

    wenn ich dann ein NSLog(@"Jetzt sollte eigentlich was passieren") anstelle von //move the mice setzte sehe ich im Run Log nix :sick:

    Ach ja auf die frage ob ich das schon kenne ... ja tue ich ... von Applescript ... On Idle Handler :)
    AiM: damnedinwhite
    MsN: killer_and_mouse@hotmail.com
    IcQ:262406127
  • myTimer: Der ist ja im Grunde genommen auch ungenutzt, also du machst ja danach nichts weiter damit. Du musst das Ding dann eben z. B. in -dealloc noch invalidieren und releasen.
    Log kommt nicht: Na ja, du musst das dann eben fuer einen Switch-Button (meinst du damit einen Radio Button?) anpassen oder du nimmst einen "normalen" und machst dann eben -setTitle - spart Platz und ist schoener. Dann muss du aber [sender setTitle:@"On"]; machen und die Abfrage auf den Button eichen - wuerde ich zumindest so machen.

    Neum

    PS: Lad das Projekt doch mal hoch oder so, ich blick da im Moment nicht richtig durch...
    "We can make all our dreams come true, but first we have to decide to awaken from them.", Josephine Baker
  • Das Problem ist, dass du in der Tat myTimer einen Wert zuweist, der allerdings nie wieder verwendet wird. Das ist _eigentlich_ auch nicht nötig, da der Timer sich selbst "füttert". Allerdings muss du irgendwann mal den Timer wieder abmelden. Das geschieht natürlich automatisch beim Programmende ist aber nicht so schön. Du soltlest denn Timer daher speichern und wenn du ihn nicht mehr brauchst eine -invalidate-Nachricht schicken.
    Es hat noch nie etwas gefunzt. To tear down the Wall would be a Werror!
    25.06.2016: [Swift] gehört zu meinen *Favorite Tags* auf SO. In welcher Bedeutung von "favorite"?