0

私は Objective C に比較的慣れていないため、配列のヘルプが必要です。

Dictionary と NSNumber 配列を含む plist があり、後でさらに配列を追加する必要があります。

NSMutableDictionary *mainArray = [[NSMutableDictionary alloc]initWithContentsOfFile:filePath];

NSArray *scoresArray = [mainArray objectForKey:@"scores"];

配列からすべての値を取得し、それらをインターフェイス ビルダーで設定した 10 個の UILabels に接続する必要があります。NSNumber を文字列にキャストするために次のことを行いました。

NSNumber *numberOne = [scoresArray objectAtIndex:0];  
NSUInteger  intOne = [numberOne intValue];  
NSString *stringOne = [NSString stringWithFormat:@"%d",intOne];  
scoreLabel1.text = stringOne;

これは非常に長い曲がりくねったアプローチのようです。すべての配列値を取得するには、上記の 4 行を 10 回繰り返す必要があります。for ループを使用して配列を反復処理し、出力ですべての値を文字列に変換できますか?

どんな情報でも大歓迎です。

4

2 に答える 2

2
// create NSMutableArray* of score UILabel items, called "scoreLabels"
NSMutableArray *scoreLabels = [NSMutableArray arrayWithCapacity:10];
[scoreLabels addObject:scoreLabel1];
[scoreLabels addObject:scoreLabel2];
// ...

NSUInteger _index = 0;
for (NSNumber *_number in scoresArray) {
    UILabel *_label = [scoreLabels objectAtIndex:_index];
    _label.text = [NSString stringWithFormat:@"%d", [_number intValue]];
    _index++;
}

編集

なぜコメントアウトしたいのかわかりません_index++。私はこのコードをテストしていないので、どこかで何かが足りないのかもしれません。しかし、私は何も悪いことは見ていません_index++—それはカウンターをインクリメントするためのかなり標準的な方法です。

配列を作成する代わりに、View Controllerのサブビュー(この場合、Interface Builderで値を追加するインスタンス)scoreLabelsのプロパティを取得することもできます。tagUILabeltag

tag値が予測可能であると仮定すると(たとえば、各UILabelfromscoreLabel1からはループで使用する値(0から9)に等しいscoreLabel10ラベルが付けられます)、直接参照できます。tag_indexforUILabel

// no need to create the NSMutableArray* scoreLabels here
NSUInteger _index = 0;
for (NSNumber *_number in scoresArray) {
    UILabel *_label = (UILabel *)[self.view viewWithTag:_index];
    _label.text = [NSString stringWithFormat:@"%d", [_number intValue]];
    _index++;
}

その機能を実現するための鍵は、tag値がに対して一意である必要があり、UILabelで参照できるものでなければならないということです-viewWithTag:

上記のコードは、tag値が値と同じであることを非常に単純に想定していますが_index、それは必須ではありません。(また、UILabelインスタンスはView Controllerのviewプロパティのサブビューであると想定しています。これは、Interface Builderでのインターフェイスの設定方法によって異なります。)

サブビューのタイプをグループ化できる1000またはその他の整数を追加する関数を作成する人もいます。UILabelインスタンスは1000、1001などを取得し、UIButtonインスタンスは2000、2001などを取得します。

于 2010-01-05T22:34:13.383 に答える
0

stringValueを使用してみてください...

scoreLabel1.text = [(NSNumber *)[scoresArray objectAtIndex:0] stringValue];
于 2010-01-05T22:33:05.310 に答える