4

json api から値を取得してグラフを作成したい。requestFinished メソッドで定義しましたが、setDataCount メソッドで値を呼び出したいです。

requestFinished メソッドでモデルを次のように定義しました。

    for (NSMutableArray *dictionary in jsonDictionary)
    {
        Model *model = [[Model alloc]init];

        model.cid = [[dictionary valueForKey:@"cid"]intValue];
        model.iid = [[dictionary valueForKey:@"iid"]intValue];
        model.yr = [[dictionary valueForKey:@"yr"]intValue];
        model.val = [dictionary valueForKey:@"val"];

        [head addObject:[NSString stringWithFormat:@"%ld", model.yr]];
        [left addObject:[NSString stringWithFormat:@"%ld", model.iid]];
        [mainTableData addObject:model];

    }

    NSOrderedSet *orderedSet = [NSOrderedSet orderedSetWithArray:head];
    headData = [[orderedSet array] mutableCopy];

    [headData sortUsingComparator:^NSComparisonResult(NSString *str1, NSString *str2) {
        return [str1 compare:str2 options:(NSNumericSearch)];
    }];

    NSOrderedSet *orderedSet1 = [NSOrderedSet orderedSetWithArray:left];
    arrLeft = [[orderedSet1 array] mutableCopy];

    [leftTableData addObject:arrLeft];

ここで、json の値「val」でポイントをプロットする必要があります。ランダムに数値を生成してプロットする次のコードを試しました。その代わりに、どうすればvalを取得できますか?

コードは次のとおりです。

- (void)setDataCount:(int)count range:(float)range
{
    NSMutableArray *xVals = [[NSMutableArray alloc] init];

    for (int i = 0; i < headData.count; i++)
    {
        [xVals addObject:[NSString stringWithFormat:@"%@", headData[i]]];
    }

    NSMutableArray *yVals = [[NSMutableArray alloc] init];

    for (int i = 0; i < headData.count; i++)
    {
        float mult = (range + 1);
        float val = (float) (arc4random_uniform(mult)) + 3;
        [yVals addObject:[[ChartDataEntry alloc] initWithValue:val xIndex:i]];
}

yVals の代わりに、次のようなことをしたい:

for (int i = 0; i < arrLeft.count; i++)
{
    array = [[NSMutableArray alloc] init];
    for (int j = 0; j < headData.count; j++)
    {
        NSPredicate *predicate = [NSPredicate predicateWithFormat:@"SELF.iid == %ld AND SELF.yr == %ld", [[arrLeft objectAtIndex:i] intValue], [[headData objectAtIndex:j] intValue]];
        NSArray *filteredArray = [mainTableData filteredArrayUsingPredicate:predicate];

        if([filteredArray count]>0)
        {
            Model *model = [filteredArray objectAtIndex:0];

            [array addObject:model.val];
        }
        else
            [array addObject:@"-"];
    }

    [yVals addObject:array];
}

[rightTableData addObject:yVals];

しかし、setDataCount メソッドの requestFinished メソッドから値を取得できません。

また、1 つの iid のグラフを 1 つのビューに表示したいと考えています。どうすればいいですか?

私はiOSチャートライブラリを使用しています。助けてください。

4

1 に答える 1

3

yVals を取得するための for ループを次のように変更しました。

for (int i = 0; i < headData.count; i++)
{
    NSPredicate *predicate = [NSPredicate predicateWithFormat:@"SELF.iid == %ld AND SELF.yr == %ld", /*10653*/[[arrLeft objectAtIndex:0]intValue], [[headData objectAtIndex:i] intValue]];
    NSArray *filteredArray = [mainTableData filteredArrayUsingPredicate:predicate];

    if([filteredArray count] > 0)
    {
        Model *model = [filteredArray objectAtIndex:0];
        [array addObject:model.val];
        float val = [model.val floatValue];
        [yVals addObject:[[ChartDataEntry alloc]initWithValue:val xIndex:i]];
    }
}

今では完全に機能します。

于 2015-04-27T04:49:01.837 に答える