1. Diese Seite verwendet Cookies. Wenn du dich weiterhin auf dieser Seite aufhältst, akzeptierst du unseren Einsatz von Cookies. Weitere Informationen

Variablen in anderen Dateien nutzen

Dieses Thema im Forum "OS X-Developer" wurde erstellt von bginner, 22.02.10.

  1. bginner

    bginner Ingrid Marie

    Dabei seit:
    13.12.09
    Beiträge:
    264
    Hallo zusammen,

    habe mal wieder eine Anfänger-frage.
    Ist für euch Spezialisten sicher kein Problem.

    Ich habe eine OldView.h und OldView.m, und das Ganze nochmal mit einer NewView.
    Ich will Variablen die ich in OldView.h deklariere in meiner NewView.m benutzen.
    Wie funktioniert das? Wenn ich einfach nur die OldView.h importiere geht es nicht :(
     
  2. LittlePixel

    LittlePixel Strauwalds neue Goldparmäne

    Dabei seit:
    09.07.08
    Beiträge:
    641
    Hallo,

    auch wenn es mittlerweile so klischeehaft klingt, aber: Hast Du einführende Literatur?

    Ich hatte zu Bginn auch Probleme mit dem Vokabular.
    "Variablen in anderen Dateien nutzen" klingt aber doch sehr befremdlich und zeigt, dass Du Dich noch belesen musst.

    Viele Grüße
     
  3. bginner

    bginner Ingrid Marie

    Dabei seit:
    13.12.09
    Beiträge:
    264
    Ja einführende Literatur habe ich, aber das was ich beschrieben habe geht in jeder Programmiersprache, also muss es ja auch in Objective-C gehen.
     
  4. LittlePixel

    LittlePixel Strauwalds neue Goldparmäne

    Dabei seit:
    09.07.08
    Beiträge:
    641
    Das mag vielleicht in jeder Sprache funktionieren, aber nicht so "einfach" in Cocoa/Objective-C.
    Das auch aus gutem Grund, denn globale Variablen widersprechen jedem guten Aufbau (Ausnahmen gibt es natürlich).

    Viele Grüße
     
  5. MacApple

    MacApple Lord Grosvenor

    Dabei seit:
    05.01.04
    Beiträge:
    3.470
    "Variablen in einer Datei deklariert" ist sehr allgemein. Es kommt auch drauf an, wo in der Datei die Variablen deklariert sind. Innerhalb einer Datei gibt es unterschiedliche Sichtbarkeiten von Variablen. Instanzvariablen sind zum Beispiel per default nur innnerhalb des Objects sichbar. Das nennt man Kapselung. Um auf Instanzvariablen von außerhalb eines Objekts zugreifen zu können, musst du Setter und Getter benutzen.

    MacApple
     
  6. Poljpocket

    Poljpocket Salvatico di Campascio

    Dabei seit:
    07.01.07
    Beiträge:
    432
    Ziehe auch in Betracht, dass du dich noch in den Begriff 'objektorientierte Programmierung' einlesen solltest. Das, was du hier beschreibt, zeugt davon, dass du da noch nicht genug weisst/Erfahrung hast.
     
  7. bginner

    bginner Ingrid Marie

    Dabei seit:
    13.12.09
    Beiträge:
    264
    Danke für eure Antworten, ich kenne sehr wohl die OOP, nur im Bereich Objective-C ist das alles ein bisschen anders.
     
  8. Pii

    Pii Rheinischer Krummstiel

    Dabei seit:
    25.06.07
    Beiträge:
    383
    Verrätst Du uns welche Literatur Du benutzt?

    Und kannst Du "die Variablen" mal genauer beschreiben.
     
  9. floorjiann

    floorjiann Strauwalds neue Goldparmäne

    Dabei seit:
    18.01.07
    Beiträge:
    639
    Nein, eigentlich nicht. Die Konzepte sind die gleichen.
     
  10. nelfisch

    nelfisch Carola

    Dabei seit:
    15.03.08
    Beiträge:
    108
    Okay, ich beantworte das jetzt einfach ohne noch mal "auf dir rumzuhacken", dass du dir ein Buch kaufen solltest :D
    Du willst die ATTRIBUTE( nicht Variablen, siehe OOP) einer Klasse in einer anderen Klasse verwenden, wenn ich das jetzt richtig verstanden habe. Ohne dein Projekt genau zu kennen, wäre es wahrscheinlich das einfachste, wenn du deiner NewView-Klasse ein OldView-Attribut gibst, dass heißt bei der nachdem du ein NewView Objekt erstellt hast kannst du diesem dann ein OldView Objekt zuweisen und dann auf die Attribute dieses Objektes zugreifen. Also konkret müsstest du im Interface des NewView-Headers schreiben:
    Code:
    OldView* oldView;
    ...
    }
    @property(....,.....)(OldView*) oldView;
    
    Dabei musst du für die Punkte dann noch einsetzen was die Propertys sein sollen. In der Implementierung dann noch dem entsprechend den Synthesizer.... An der Stell, wo du dein NewView-Objekt dann benutzen willst muss folgendes hin (gehe davon aus, dass du dein NewView-Objekt bereits erzeugt hast!):
    Code:
    myNewView.oldView = [[OldView alloc] init]; //oder je nach Bedarf deinen Intialisierer einfügen
    [myNewView.oldView.requestesAttribut doSomething:(NSExample*)example ];
    Hoffe das war einigermaßen verständlich...
    KAUF DIR FACHLITERATUR! :innocent:
     
  11. bginner

    bginner Ingrid Marie

    Dabei seit:
    13.12.09
    Beiträge:
    264
    Hallo zusammen,

    anscheinend ist nelfisch der einzigste der verstanden hat worum es mir geht, vielen Dank an dieser Stelle.
    Ich habe deinen Vorschlag ausprobiert und leider gab es 2 Fehler in der header-datei von New View ... "Expected specifier-qualifier-list before '(' token". der zweite fehler sah genauso aus und trat unten beim @property auf.
    macht aber nix...

    Ich konkretisiere es nochmal:

    Ich habe eine OldViewViewController.h mit der dazugehörigen .m Datei. des weiteren existiert eine NewView.h auch mit der dazugehörigen .m Datei.
    In der OldViewViewController.h definiere ich eine Attribut listItems vom Typ NSMutableArray. wie folgender Code zeigt:
    Code:
    @interface OldViewViewController : UIViewController 
    {
        NSMutableArray *listItems;
    
    }
    @property(nonatomic, retain) NSMutableArray *listItems;
    
    @end
    
    in der OldViewViewController.m füge ich @synthesize listItems; hinzu

    Nun kommt das entscheidene: Ich will jetzt in der NewView.m auf das Attribut listItems zugreifen welches ich ja in der
    OlViewViewController.h definiert habe.
    Also habe ich in der NewView.m folgendes geschrieben:
    Code:
    #import "NewView.h"
    #import "OldViewViewController.h";
    
    @implementation NewView
    
    - (void)viewDidLoad 
    {
        [super viewDidLoad];
        
        listItems = [[NSMutableArray alloc] init];
        
    [listItems addObject:@"Erster Eintrag"];
    }
    
    
    Und das gibt einen Fehler der lautet: listItems is undeclared;
    Wenn ich jetzt anfange in der NewView.h ein Objekt vom Typ OldViewViewController zu erzeugen, habe ich zwei Fehler mehr.

    Code:
    #import <UIKit/UIKit.h>
    
    
    @interface NewView : UITableViewController 
    {
        
        (OldViewViewController) *oldViewObject;       <-- Fehler: Expected specifier-qualifier-list before '(' token
    }
    @property(nonatomic, retain) (OldViewViewController) *oldViewObject;  <-- Fehler: Expected specifier-qualifier-list before '(' token
    
    @end
    
    Was mache ich falsch?
    wenn ihr mir das ähnlich ausführlich erklärt wäre ich euch sehr dankbar:

    P.S: Selbstverständlich habe ich Fachliteratur... mehr als genug.
     
  12. Poljpocket

    Poljpocket Salvatico di Campascio

    Dabei seit:
    07.01.07
    Beiträge:
    432
    Also, dein erster Fehler ist, dass du versuchst, die listItems in der Implementation einer anderen Klasse so zu benutzen, als wären diese eine dessen Instanzvariablen. Darum das 'undeclared'. Du musst also die listItems sehr wohl in der Klasse 'OldViewViewController' initialisieren. Dann kannst du mit [myOldViewController listItems] (oder: myOldViewController.listItems) aus NewView darauf zugreifen.

    Für deinen zweiten Fehler, glaube ich, dass die Klammern das Problem sind. Ich hab noch nie eingeklammerte Klassennamen in dieser Form gesehen. Also die Klammern einfach weglassen und das sollte in Ordnung sein.

    Weiter wirst du mit Sicherheit einen weiteren Fehler im Anschluss erhalten, denn die Klasse 'OldViewViewController' ist im NewView.h nicht deklariert. Ein einfaches '@class ...' reicht aus, da du im NewView.m den Header importierst. Du könntest auch einfach das '#import ...' in den Header rüber nehmen, und das Problem ist auch gelöst.

    Gruss ppocket

    PS: Was für Fachliteratur brockt dir dieses Zeugs denn ein?
     
  13. bginner

    bginner Ingrid Marie

    Dabei seit:
    13.12.09
    Beiträge:
    264
    Herzlichen Dank... es hat funktioniert. Hatte einfach vergessen ein Objekt vom OldViewViewController in der NewView.h zu erstellen und die OldViewViewController.h musste ich auch noch bei NewView.h einbinden.
     

Diese Seite empfehlen