Zugriff auf Variable von überall

  • Zugriff auf Variable von überall

    Hallo,
    ich bin neu in Objective-C, hab vorher auf Windows mit C# und Java gearbeitet.
    Ich will auf ein Objekt, das unter anderem ein NSMutableArray enthält von überall zugreifen können. Wie mach ich das am besten? Globale Variable? Hab gelesen, die sind böse... :)
    Das Programm soll so aufgebaut sein, dass man eine Gruppe anlegen oder laden kann. Die Gruppe hat einen Namen hat und mehrere Mannschaften. Ich hab jetzt eine Klasse Gruppe und eine Klasse Mannschaft. Die Gruppe hat einen NSMutableArray, in das dann die Mannschaften rein sollen. Das Problem ist: wie kann ich von "überall" auf die Gruppe zugreifen?
    Danke.
  • Deiner Beschreibung nach zu urteilen lässt du am besten den AppDelegate diesen Gruppen-Array managen.

    Edit:
    Nanu? Amin, ich behaupte du hast das Datum deines Posts gefälscht! Als ich die Seite geladen hab war der noch nicht da, und nun soll der seit 17 Minuten da sein? Ha! ;) :)
    Widgetschmie.de • Life is too short for gadgets
  • RE: Zugriff auf Variable von überall

    Original von klause85
    Das Problem ist: wie kann ich von "überall" auf die Gruppe zugreifen?

    Was ist denn 'überall'?
    Applikationsweit? Systemweit? Von allen Objekten aus?

    Applikationsweit: übers Application Delegate bzw. MyDocument. Da als Instanzvariable eintragen und du kannst dich applikationsweit auf das Delegate deiner Application durchhangeln.

    Systemweit: Scripting-Unterstützung einbauen.

    Von allen Objekten aus: Das willst du nicht.
    Views, Labels und Konsorten haben nix mit deinem Datenmodell zu tun. Immer fleißig Controller, Datasources und Delegates bauen, die auf das Delegate ihrer Application zugreifen. (Oder das AppDelegate verpflichten, die Information über die Objekte an deine Controller, Datasources und Delegates weiterzugeben)
    «Applejack» "Don't you use your fancy mathematics to muddle the issue!"

    Iä-86! Iä-64! Awavauatsh fthagn!

    kmr schrieb:

    Ach, Du bist auch so ein leichtgläubiger Zeitgenosse, der alles glaubt, was irgendwelche Typen vor sich hin brabbeln. :-P
  • Original von Pascal
    Deiner Beschreibung nach zu urteilen lässt du am besten den AppDelegate diesen Gruppen-Array managen.

    Edit:
    Nanu? Amin, ich behaupte du hast das Datum deines Posts gefälscht! Als ich die Seite geladen hab war der noch nicht da, und nun soll der seit 17 Minuten da sein? Ha! ;) :)

    Woraus wir lernen, dass du der Welt langsamste Tipper bist. *g*
    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"?
  • hallo,
    danke für die vielen Antworten. Es soll nur applikationsweit gehen. Über's AppDelegate hab ich's schon versucht, aber das bekomm ich nicht hin.
    AppDelegate.h sieht so aus:

    Quellcode

    1. #import <Cocoa/Cocoa.h>
    2. #import "Group.h"
    3. @interface ReproMacOSXAppDelegate : NSObject <NSApplicationDelegate> {
    4. NSWindow *window;
    5. Group *gruppe;
    6. }
    7. @property (assign) IBOutlet NSWindow *window;
    8. @end
    Alles anzeigen
    Mein Problem ist jetz: von Anfang an ist eigentlich keine Gruppe geladen. Die wird erzeugt, indem eine neue erstellt oder geladen wird. Das geschieht über ein Sheet mit Hilfe eines eigenen Controllers.
    Wie instanziiere ich die gruppe dann bzw. weise der Variable gruppe eine Instanz zu? stimmt das so wie ich da gemacht hab? Hier mein Versuch für den Code des Controllers:

    Quellcode

    1. #import "CreateGroupController.h"
    2. #import "Group.h"
    3. @implementation CreateGroupController
    4. -(IBAction)openCreateGroupWindow:(id)sender {
    5. [NSApp beginSheet:CreateGroupWindow
    6. modalForWindow:MainWindow
    7. modalDelegate:self
    8. didEndSelector:@selector(createGroupDidEnd: returnCode: contextInfo:)
    9. contextInfo:NULL];
    10. [groupName setStringValue:@""];
    11. }
    12. -(IBAction)createGroup:(id)sender
    13. {
    14. [NSApp endSheet:CreateGroupWindow returnCode: NSOKButton];
    15. [CreateGroupWindow orderOut:nil];
    16. }
    17. -(IBAction)cancelCreateGroup:(id)sender
    18. {
    19. [NSApp endSheet:CreateGroupWindow returnCode: NSCancelButton];
    20. [CreateGroupWindow orderOut:nil];
    21. }
    22. - (void)createGroupDidEnd:(NSWindow *)sheet returnCode:(int)returnCode
    23. contextInfo:(void*)contextInfo
    24. {
    25. if(returnCode == NSOKButton)
    26. {
    27. [[[NSApp gruppe] alloc]init]; // Warnung: no '-gruppe' method found
    28. [[NSApp gruppe] setName:[groupName stringValue]]; // Warnung: no '-gruppe' method found
    29. }
    30. }
    31. @end
    Alles anzeigen
    muss ich gruppe als @property deklarieren? im Debugger-Log ist der Fehler, wenn ich auf OK klicke beim Gruppenerstellen: [NSApplication gruppe]: unrecognized selector sent to instance 0x10011be00
  • Original von klause85
    im Debugger-Log ist der Fehler, wenn ich auf OK klicke beim Gruppenerstellen: [NSApplication gruppe]: unrecognized selector sent to instance 0x10011be00

    Kein Wunder, du hast ja auch keine Methode "group" erstellt, nur eine Instanzenvariable. Daraus eine Property zu machen behebt dieses Problem (wenn du denn [NSApp delegate] statt NSApplication benutzst) und wohl auch deine anderen. ;)

    Hast du schon etwas Einführendes gelesen? Würde ich sonst vorschlagen.
    Widgetschmie.de • Life is too short for gadgets
  • Original von klause85
    Literatur ist so ne Sache :) ich hab mir das Tutorial von Apple durchgelesen und so n bissl gegooglet, je nachdem was ich halt brauch. cocoa-coding.de hab ich gelesen[…]

    Okay, dann ist klar, warum du auf keinen grünen Zweig kommst.
    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 klause85
    was will ich mit einem Buch, wenn ich nichtmal im Internet fündig werd? Das ist in meinen Augen nur rausgeworfenes Geld.

    Stell dir vor dein Arzt/Rechtsanwalt/Elektroniker sagt so einen Unsinn.
    Widgetschmie.de • Life is too short for gadgets
  • Was ihr mit euren Berufsvergleich wollt versteh ich nicht ganz. Programmieren ist für mich ein kleines Hobby, mehr nicht. Ich hab nicht vor damit groß Geld zu verdienen.
    Grundlagen sind für jeden was anderes. Objektorientierung und was damit zusammenhängt ist mir sehr gut bekannt, sei's durch's Studium oder wie gesagt C# und Java.

    Dass ihr gleich so pampig werden müsst (Pascal, SumpfMonster) kann ich da nicht nachvollziehen, Amin Negm-Awad hat doch eh alles gesagt. Stattdessen hättet ihr mir Literatur-Empfehlungen geben können. Aber wie's aussieht, seit ihr obertolle Programmiernerds.

    Aber ich werd mir mal paar Kapitel von eurem tollen Buch reinziehn....
  • Das siehst du falsch. Ich kann dir sagen, was du mit einem obertollen Buch anfangen kannst:

    Nicht die Zeit und das Wissen anderer kostenlos in Anspruch nehmen.

    Es ist ehrlich gesagt schon ein wenig atemberaubend, hier zu sagen, dass man sich das ja sparen könne, weil man nur hobbymäßig programmiert und dann gleichzeitig von anderen mal eben einen Einstiegskurs zu fordern. Sorry, das ist Billigheimerei.
    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"?
  • Das bezog sich nicht auf alle.
    Wie gesagt, ich hab was "Einführendes" (liegt wie immer im Auge des Betrachters, wie man das definiert) gelesen. Wenn für euch das nur "das" Buch ist, sagt das. Desweiteren hab ich mir erlaubt eure kostbare Zeit erst dann in Anspruch zu nehmen, wenn ich auch ausführlich danach im Internet gesucht habe, nichts gefunden habe und auch alle Versuche gescheitert sind. Wenn euch das zu viel ist, wieso antwortet ihr hier? Spart euch eure Zeit lieber. Ich hab auch nirgends einen Einstiegskurs gefordert, ich hab eine konkrete Frage gestellt.
    Bisher hab ich die Erfahrung gemacht, dass man auch kostenlos Hilfe bekommen (und geben) kann, auch bei noch so (in manchen Augen) beknackten Fragen. Aber anscheinend nicht hier.