2009-08-25 4 views
0

Ich habe eine harte Zeit mit Arrays arbeiten. Kommen von AS2/AS3 und Garbage Collection ist neu für mich ...;)Fehler beim Speichern von NS (veränderbar) Array in einer Klasse

Dies ist nicht der vollständige Code, nur die Teile, die wichtig sind.

.h-file 
@interface HelperViewController : UIViewController { 
    NSMutableArray *pagesNumbers; 
} 
@property (nonatomic, retain) NSMutableArray *pagesNumbers; 

.m-file 
@synthesize pagesNumbers; 
-(void)loadView { 
    pagesNumbers = [NSMutableArray arrayWithObjects:[NSNumber numberWithInt:1], [NSNumber numberWithInt:1], [NSNumber numberWithInt:1], [NSNumber numberWithInt:1], nil]; 
    NSLog(@"pagesNumbers: %@", pagesNumbers); // WORKS! 
} 
-(void)changePage:(id)sender { 
    NSLog(@"pagesNumbers: %@", pagesNumbers); // PROBLEM* 
} 

Das Problem * da oben ist, dass es funktioniert, wenn die Funktion von viewDidLoad genannt wird, aber er abstürzen, wenn es von einem UIButton mit diesem später genannt wird (sehr informativ) msg:

[ Die Sitzung begann um 2009-08-25 11:12:51 +0200.] GNU gdb 6.3.50-20050815 (Apple-Version gdb-966) (Di 10 Mär 02:43:13 UTC 2009) Copyright 2004 Free Software Foundation , Inc. GDB ist freie Software, die von der GNU General Public License abgedeckt wird, und Sie sind unter willkommen, es unter bestimmten Bedingungen zu ändern und/oder Kopien davon zu verteilen. Geben Sie "show copying" ein, um die Bedingungen zu sehen. Es besteht keinerlei Garantie für GDB. Geben Sie "show guarantee" für Details ein. Diese GDB wurde als "i386-apple-darwin" konfiguriert .sharedlibrary gelten Last-Regeln alle Anbringen 13197.

Kann mir jemand helfen zu verarbeiten, bitte?

Grüße, Eric.

Antwort

2

Sieht aus wie pagesNumbers wird nicht beibehalten.

Versuchen Zugabe:

[pagesNumbers retain]; 

nach dem Array in Loadview initialisiert wurde.

Ich glaube, ArrayWithObjects wird ein automatisch freigegebenes Array zurückgeben, so dass Sie es explizit beibehalten müssen, wenn Sie es später verwenden möchten.

Bearbeiten, nur bemerkte SeitenNumbers ist auch eine Eigenschaft. Sie initialisieren pagesNumbers direkt, sodass der synthetisierte Setter nicht aufgerufen wird (und nicht automatisch beibehalten wird). Wenn Sie den Property Setter verwenden wollten, müssen Sie die Seiten mit Hilfe von self referenzieren, zB

self.pagesNumbers = [NSMutableArray arrayWithObjects..... 
+0

Vielen Dank, Tom, das "Selbst" hat es geschafft. Und mit deiner Erklärung ist es endgültig in mein Gehirn eingebrannt, um "Selbst" zu benutzen. Einen schönen Tag noch, meins ist dir jetzt Dank! ;) –