• Apfeltalk ändert einen Teil seiner Allgemeinen Geschäftsbedingungen (AGB), das Löschen von Useraccounts betreffend.
    Näheres könnt Ihr hier nachlesen: AGB-Änderung
  • Viele hassen ihn, manche schwören auf ihn, wir aber möchten unbedingt sehen, welche Bilder Ihr vor Eurem geistigen Auge bzw. vor der Linse Eures iPhone oder iPad sehen könnt, wenn Ihr dieses Wort hört oder lest. Macht mit und beteiligt Euch an unserem Frühjahrsputz ---> Klick

Variablen in anderen Dateien nutzen

bginner

Ingrid Marie
Registriert
13.12.09
Beiträge
266
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 :(
 

LittlePixel

Strauwalds neue Goldparmäne
Registriert
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
 

bginner

Ingrid Marie
Registriert
13.12.09
Beiträge
266
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.
 

LittlePixel

Strauwalds neue Goldparmäne
Registriert
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
 

MacApple

Schöner von Bath
Registriert
05.01.04
Beiträge
3.652
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 :(
"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
 

Poljpocket

Salvatico di Campascio
Registriert
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.
 

bginner

Ingrid Marie
Registriert
13.12.09
Beiträge
266
Danke für eure Antworten, ich kenne sehr wohl die OOP, nur im Bereich Objective-C ist das alles ein bisschen anders.
 

Pii

Rheinischer Krummstiel
Registriert
25.06.07
Beiträge
383
Verrätst Du uns welche Literatur Du benutzt?

Und kannst Du "die Variablen" mal genauer beschreiben.
 

nelfisch

Carola
Registriert
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:
 

bginner

Ingrid Marie
Registriert
13.12.09
Beiträge
266
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.
 

Poljpocket

Salvatico di Campascio
Registriert
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?
 

bginner

Ingrid Marie
Registriert
13.12.09
Beiträge
266
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.