0

現在、うまく機能するボタンの配列が生成されています。-(void)onTouchこの外側では、アクションを決定するために何らかの計算が行われる関数が各ボタンの内側で呼び出されます。押されたボタンの履歴を保存したいことを除いて、これはすべてうまくいきます。押されたボタンの値を作成して保存するためにさまざまな方法を試しましたNSMutableArrayが、配列は内でしか宣言できないためです-onTouchアクション、ボタンが押されるたびに配列がリセットされるため、複数の移動を記憶することはありません。ヘッダーで配列を宣言して外部で合成しようとすると、nsmutable 配列がコンパイル時のものではないか、何も保存されていないというエラーが表示されます (ログ出力は "(null)" です。 uibutton プレス イベントが発生する場所の外に uibutton タグを格納および追加できる配列を宣言する方法に関するコード? これが明確でない場合は、今夜遅くにコードを投稿します。

乾杯

4

2 に答える 2

2

配列を宣言するだけでなく、初期化する必要があります。初期化しない場合、必ずしも警告が表示されるわけではありませんが、多くの nil データが取得されます。

(お気づきのように) 配列を 1 回だけ初期化したいのでviewDidLoad、それを行うのに適した場所です。別の良い場所は、カスタム アクセサーにあります...

- (NSMutableArray*)historyArray
{
    if (!_historyArray) {
       _historyArray = [[NSMutableArray alloc] init];
    }
    return _historyArray;
}

を初めて実行しようとする[self.historyArray addObject:sender]と、アクセサは historyArray がないことを認識し、作成して返します。すでに存在しているため、次回は再作成されません。

于 2013-03-18T23:44:55.650 に答える
1
@property(nonatomic,retain)NSMutableArray *tapCollection;

-(void)viewDidLoad{

   self.tapCollection = [[NSMutableArray alloc] init];
}

-(void)onTouch:(id)sender{

   UIButton *btnTapped = (UIButton *)sender;

   [self.tapCollection addObject:[NSNumber numberWithInt:btn.tag]];
}
于 2013-03-18T23:46:03.180 に答える