0

配列を操作するのに苦労しています。AS2 / AS3から来て、ガベージコレクションは私にとって新しいものです...;)

これは完全なコードではなく、重要な部分だけです。

.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*
}

問題*は、関数がviewDidLoadによって呼び出されたときに機能しますが、後でこの(非常に有益な)メッセージでUIButtonによって呼び出されたときにクラッシュします。

[セッションは2009-08-2511:12:51+0200に開始されました。]GNUgdb 6.3.50-20050815(Appleバージョンgdb-966)(Tue Mar 10 02:43:13 UTC 2009)Copyright 2004 Free Software Foundation、 Inc. GDBは、GNU General Public Licenseの対象となるフリーソフトウェアであり、特定の条件下で変更したり、コピーを配布したりすることができます。「showcopying」と入力して条件を確認します。GDBの保証は一切ありません。詳細については、「保証の表示」と入力してください。このGDBは、「i386-apple-darwin」として構成されました。sharedlibraryapply-load-rulesallプロセス13197に接続しています。

誰か助けてもらえますか?

よろしく、エリック。

4

1 に答える 1

2

pagesNumbersが保持されていないようです。

追加してみてください:

[pagesNumbers retain];

配列がloadviewで初期化された後。

arrayWithObjectsは自動解放された配列を返すと思うので、後で使用する場合は明示的に保持する必要があります。

編集、ちょうど気づいたpagesNumbersもプロパティです。合成されたセッターが呼び出されないように(そして自動的に保持されないように)、pagesNumbersを直接初期化しています。プロパティセッターを使用したい場合は、selfを使用してpagesNumbersを参照する必要があると思います。

self.pagesNumbers = [NSMutableArray arrayWithObjects.....
于 2009-08-25T09:23:37.503 に答える