0

どうすれば、名前の異なる複数のオブジェクトを に渡すことができ InitializeますallocateNSArray。以下のコードから、オブジェクトはループ内で 1 回初期化されます。For ループは別の名前で実行されるため、複数回初期化する必要がありますNSArray0 ..初期化されたアイテムは、 次回i=1 と i=2のときに名前が同じになります。ループ内でこれを変更するにはどうすればよいですか?tempItemitempItemiNSArray *items

for (int i = 0; i< [Array count]; i++)
{
    id object = [Array objectAtIndex:i];

    if ([object isKindOfClass:[NSDictionary class]])
    {
        NSDictionary *objDict = (NSDictionary *)object;


        ECGraphItem *tempItemi = [[ECGraphItem alloc]init];

        NSString *str = [objDict objectForKey:@"title"];

        NSLog(@"str value%@",str);
        float f=[str floatValue];
        tempItemi.isPercentage=YES;
        tempItemi.yValue=f;
        tempItemi.width=30;

        NSArray *items = [[NSArray alloc] initWithObjects:tempItemi,nil];
        //in array need to pass all the initialized values


        [graph drawHistogramWithItems:items lineWidth:2 color:[UIColor blackColor]];
    }
}
4

3 に答える 3

4

配列を変更可能にしてから、毎回次のようにオブジェクトを追加しないでください。

NSMutableArray *items = [[NSMutableArray alloc] init];
// a mutable array means you can add objects to it!

for (int i = 0; i< [Array count]; i++)
{
    id object = [Array objectAtIndex:i];

    if ([object isKindOfClass:[NSDictionary class]])
    {
        NSDictionary *objDict = (NSDictionary *)object;


        ECGraphItem *tempItemi = [[ECGraphItem alloc]init];

        NSString *str = [objDict objectForKey:@"title"];

        NSLog(@"str value%@",str);
        float f=[str floatValue];
        tempItemi.isPercentage=YES;
        tempItemi.yValue=f;
        tempItemi.width=30;

        [items addObject: tempItemi];
        //in array need to pass all the initialized values

       }
}

    [graph drawHistogramWithItems:items lineWidth:2 color:[UIColor blackColor]];

とにかくitems、元のコードでは毎回再初期化され、毎回新しいヒストグラムを描画しているため、コードは機能しません...これは機能するはずです...

于 2012-12-25T07:24:48.780 に答える
1

あなたが言ったように、動的に変数を作成したい

ECGraphItem *tempItemi = [[ECGraphItem alloc]init];

ここiはループで変更されます

NSDictionarytempItem1/2/3/4.... をキーとしてキー/値を使用して作成し、 alloc/init によって値を保存できます。

次に、変数の代わりに、tempItem32を使用し[dict valueForKey:@"tempItem32"]ます。

編集:

これが便利な場合は、この例を確認してください

NSMutableDictionary *dict=[NSMutableDictionary new];
for (int i=1; i<11; i++) {
    NSString *string=[NSString stringWithFormat:@"string%d",i];
    [dict setObject:[NSString stringWithFormat:@"%d", i*i] forKey:string];

}
NSLog(@"dict is %@",dict);

NSString *fetch=@"string5";
NSLog(@"val:%@, for:%@",[dict valueForKey:fetch],fetch);
于 2012-12-25T07:44:56.893 に答える
1

あなたが書いたコードは問題ありませんが、 NSArray *items各ループには常に 1 つの項目しか含まれません。for ループの外側を として宣言し、NSMutableArray使用しているのと同じコードを使用します。

于 2012-12-25T07:24:31.073 に答える