0

私はobj-cが初めてで(これは私の初日のクラスです)、多次元配列からのランダムな文字列でラベルを変更しようとしています。さらに、ボタンを押すたびに配列を切り替えます。私はそれが少し奇妙であることを知っています...これはIBActionです:

UIButton *button = (UIButton *)sender;
NSMutableArray *firstArray = [NSMutableArray array];
[firstArray addObject:@"foo"];

NSMutableArray *secondArray = [NSMutableArray array];
[secondArray addObject:@"bar"];

NSMutableArray *frasi = [NSMutableArray array];
[frasi addObject:firstArray];
[frasi addObject:secondArray];

NSMutableArray *array  = [NSMutableArray arrayWithObjects:[frasi objectAtIndex:[button isSelected]], nil];
NSString *q = [array objectAtIndex: (arc4random()% [array count] )];
NSString *lab = [NSString stringWithFormat:@"%@", q];
self.label.text = lab;

すべて動作しますが、新しいラベルは

(     "foo" )

単なるfoo(引用符なし)の代わりに...おそらくコードの最後のブロックを台無しにしています...

タイ

4

2 に答える 2

1

実際には配列内に配列があります

この行をあなたのものに置き換えてください:

NSString *q = [[array objectAtIndex: (arc4random()% [array count] )] objectAtIndex:0];
于 2012-07-10T13:12:29.487 に答える
1

したがって、2 つの可変配列を作成し、それらを新しい可変配列に追加しますfrasi。次に、これら 2 つの配列のいずれかを取得し、それを新しい配列の単一要素として使用します (arrayWithObjects:の代わりに使用するため) 。arrayWithArray:array

単一arrayの配列要素を含む配列も同様です (文字列の配列ではなく)。

からオブジェクトを取得する場合array、それは常に、初期化に使用されたのと同じ 1 つのオブジェクト ( または のいずれfirstArrayか)secondArrayです。

したがって、文字列を期待する場所に文字列の配列を取得します。を使用する場合stringWithFormat:、指定子%@はそのオブジェクトの文字列の説明に置き換えられます。

文字列は、それ自体を説明として返します。しかし、配列の説明は、コンマで区切られ、括弧で囲まれたすべての要素のリストです( "foo" )

したがって、不要な配列を作成する代わりに、最後の 8 行目をすべて次のように置き換えることができます。

NSArray *array = [ボタンが選択されている] ? secondArray : firstArray;
self.label.text = [array objectAtIndex:arc4_uniform([array count])];
于 2012-07-10T14:35:43.460 に答える