-6

ViewDidLoad animalz = [NSArray arrayWithObjects:@"rabbit",@"deer",@"ox", @"horse", @"cow", nil];でこのように宣言された NSArray があり、NSString を取得して再配置する UIView サブクラスを作成しました。ユーザーがボタンを押すと、ボタンに関連付けられた数字が必要な配列の数字になります (例: 数字が 3 の場合は「馬」という値が必要ですが、ボタンが 4 の場合は「牛」が必要です) "); 現在、これらの数値は long int の形式になっており、対応する値を nsarray で取得できません。私はやってみました:

    selectedani //this is the long int that represents the button
    int indexani = [animalz objectAtIndex:selectedani];
    NSString *anistr = [NSString stringWithFormat:@"%i",indexani];
    [self rearrange:btistr];

これにより、コンパイラの警告やエラーは表示されませんが、ボタンを押すとアプリがクラッシュします。私は何を間違っていますか?どうすれば修正できますか?

4

3 に答える 3

2
selectedani //this is the long int that represents the button
NSString *anistr = [animalz objectAtIndex:selectedani];
[self rearrange:anistr];
于 2013-07-03T18:33:53.840 に答える
1

animalzNSStringオブジェクトの配列ですが、 を呼び出すと[animalz objectAtIndex:selectedani]、結果が int に代入されます。

于 2013-07-03T18:28:17.130 に答える
0

まず、使用する前にselectedaniを割り当てましたか?そうでない場合は、selectedani を使用しないでください。ボタンのメモリ位置やその他のプロパティが異なる可能性があります。

[animalz objectAtIndex:selectedani]

オブジェクトが返され、このオブジェクトを必要なものではなく int にキャストします。もちろん、それもインデックスではありません。

あなたは何ができますか?タグ番号を対応するボタンに動的に割り当てます。

button.tag = 1;//or something like it

次に、IBActionメソッドでタグを取得し、それを使用して配列を解析します。

- (IBAction)buttonPressed:(id)sender
{
  UIButton *pressedBtn = (UIButtton *)sender;
  NSString *anistr = [animalz objectAtIndex:pressedBtn.tag];

  //do what you want to do with the string
  [self rearrange:anistr];
}

この場合、animalzを iVar またはプロパティとして宣言します。

于 2013-07-03T18:58:25.750 に答える