• Apfeltalk ändert einen Teil seiner Allgemeinen Geschäftsbedingungen (AGB), das Löschen von Useraccounts betreffend.
    Näheres könnt Ihr hier nachlesen: AGB-Änderung
  • Wir haben den Frühjahrsputz beendet, Ihr auch? Welches Foto zu dem Thema hat Euch dann am Besten gefallen? Hier geht es lang zur Abstimmung --> Klick

Probleme bei Ausgabe von Daten in einem NSArray

MoFuRo

Jamba
Registriert
10.06.10
Beiträge
55
Hallo zusammen,

ich schlage mich jetzt seit ein paar Stunden mit diesem Problem rum und ich finde keine Lösung dafür. Ich versuche einfach auf Button press das Array auszugeben. Ich weiß nicht an was es genau scheitert, aber die App stürzt ab nachdem der button gepresst wurde.

Hier der Code:

Code:
- (void)viewWillAppear:(BOOL)animated {
	[super viewWillAppear:animated];

	banana = [NSArray arrayWithObjects:@"affe", @"birne", nil];
}

- (IBAction)showItems:(id)sender {
	for (NSString *item in banana) {
		NSLog(@"Name: %@ ", item);
	}
}

Eigentlich ein simpler Code. Es wird auch kein Fehler generiert. Die Variable banana ist in dem .h File so definiert:

Code:
NSArray *banana;

Wäre cool wenn mir jemand helfen kann ;)
 

Mole23

Grahams Jubiläumsapfel
Registriert
05.07.10
Beiträge
104
Was sagt denn der Debugger? Bist du dir sicher, dass die/das Array korrekt erstellt wird?

Wenn nicht versuch doch mal die/das Array (kennt jemad den richtigen Artikel?) wie folgt zu erstellen:

tableList = [[NSMutableArray alloc] init];

[tableList addObject:mad:"apfel"];
[tableList addObject:mad:"birne"];
[tableList addObject:mad:"obst im allgemeinen"];
[tableList addObject:mad:"saft"];
[tableList addObject:mad:"gurke"];
[tableList addObject:mad:"streichholz"];
 

Miralem23

Kaiser Wilhelm
Registriert
24.11.08
Beiträge
178
banana = [NSArray arrayWithObjects:mad:"affe", @"birne", nil]; da drann liegt es.

NSArray * banana = [[NSSArray alloc] initWithObjects: @"baum", @"strauch", nil];

Oder du benutzt ein NSMutableArray, dann musst du es so machen wie Mole23
 

Miralem23

Kaiser Wilhelm
Registriert
24.11.08
Beiträge
178
Noch was: In der Docu ist ein tolles Beispiel zu deiner Klassenmethode arrayWithObjects:

hier so funktioniert das:

NSArray *myArray;

NSDate *aDate = [NSDate distantFuture];
NSValue *aValue = [NSNumber numberWithInt:5];
NSString *aString = @"a string";

myArray = [NSArray arrayWithObjects:aDate, aValue, aString, nil];

Bei muss dann eben stehen:

NSString* affe;
NSString* birne;

affe = @"Affe";
birne = @"Birne";

banana = [NSArray arrayWithObjects:mad:"affe", @"birne", nil];
 

MoFuRo

Jamba
Registriert
10.06.10
Beiträge
55
Danke für eure vielen Antworten. War ein Anfänger Fehler.

banana wurde releast bevor ich es wieder verwendet habe, da es im autoreleast wurde. Das hat also was mit dem Memory Managment was zu tun ;) Geholfen hat das Verwenden initialisierungsmethode initWithObjects.

Danke an Alle!!!
 

Thyraz

London Pepping
Registriert
14.05.08
Beiträge
2.050
Und im dealloc der View dann das [banana release] nicht vergessen. ;)
Sonst gibts Speicherleichen falls die View nicht vom Anfang bis zum Ende des Programmablaufs vorhanden ist.
(Und selbst dann wäre es nicht die feine englische Art.)

Ich würde außerdem dazu raten viewDidLoad statt viewWillAppear für solche Spielchen zu verwenden.
viewWillAppear kann durchaus öfter als einmal zu Lebzeiten einer View auftreten.
Bin mir nicht sicher ob es nicht sogar nach einem wechsel von hidden und zurück nochmalig aufgerufen wird.

Bei dynamisch erzeugten Arrays wundert man sich sonst evtl. warum der Inhalt plötzlich nicht mehr der gewollte ist.
 

ifthenelse

Fießers Erstling
Registriert
07.12.06
Beiträge
129
Und im dealloc der View dann das [banana release] nicht vergessen. ;)
Das sowieso.

Sonst gibts Speicherleichen falls die View nicht vom Anfang bis zum Ende des Programmablaufs vorhanden ist.
(Und selbst dann wäre es nicht die feine englische Art.)
Wenn die App im Wesentlichen nur aus genau einem View-Controller besteht und für die Visualisierung nur genau das dazugehörige View (+ Subviews) benötigt wird (+ Modellkram), was ist daran unfein? Vielleicht banal, das ja, die Implementierung kann aber vollkommen den Regeln des MVC-Paradigmas folgen.

Ich würde außerdem dazu raten viewDidLoad statt viewWillAppear für solche Spielchen zu verwenden.
viewWillAppear kann durchaus öfter als einmal zu Lebzeiten einer View auftreten.

Ein View wird (hoffentlich) nie ein viewDidLoad oder viewWillAppear direkt zu Gesicht bekommen. Diese Messages gehen an View-Controllern. Und davon wird i.d.R. zumindest min. einer zwischen applicationDidFinishLaunching und applicationWillTerminate existieren.

Aber in der Tat sollte man sich genau überlegen, was man in viewWillDisappear/viewWillAppear und viewWillAppear/viewDidAppear rein-coded. Initialisierungen am Modell jedenfalls eher selten bis gar nicht.

Bin mir nicht sicher ob es nicht sogar nach einem wechsel von hidden und zurück nochmalig aufgerufen wird.
Und ich bin mir nicht sicher, was Du hiermit meinst. Wenn vom View-Controller aus das kontrollierte View per hidden-Property ein-/ausgeblendet wird (was für dieses View wenig Sinn macht), wird jedenfalls kein viewWillDisappear, viewWillAppear, viewWillAppear oder viewDidAppear an diesen Controller gesendet.