2012-02-20 10 views
0

CorePlotを習得しようとしています。私は "codejunkster"のコード例を見つけましたが、これは "T"に従っていますが、動作しません。私はそれをnumberForPlotメソッドに絞りました。コードは以下の通りです。どちらの条件も真実ではなく、私は理由を理解できません。下記のチュートリアル、パーコアプロット "numberForPlot"が正しく実行されない

-(NSNumber *)numberForPlot:(CPTPlot *)plot field:(NSUInteger)fieldEnum recordIndex:(NSUInteger)index 
{ 
    if ([plot.identifier isEqual:@"chocoplot"]) 
    { 
     NSDictionary *bar = [self.dataForChart objectAtIndex:index]; 

     if(fieldEnum == CPTBarPlotFieldBarLocation) 
     { 
      return [bar valueForKey:BAR_POSITION]; 
      NSLog(@"return [bar valueForKey:BAR_POSITION]"); 
     } 
     else if(fieldEnum ==CPTBarPlotFieldBarTip){ 
      NSLog(@"return [bar valueForKey:BAR_HEIGHT];"); 
      return [bar valueForKey:BAR_HEIGHT]; 
     } 
    } 
    return [NSNumber numberWithFloat:0]; 
} 

これはおそらくバグですか、あなたは、プロットの別のタイプを初期化した

// Create bar plot and add it to the graph 
CPTBarPlot *plot = [[CPTBarPlot alloc] init] ; 
plot.dataSource = self; 
plot.delegate = self; 
plot.barWidth = [[NSDecimalNumber decimalNumberWithString:@"5.0"] 
       decimalValue]; 
plot.barOffset = [[NSDecimalNumber decimalNumberWithString:@"10.0"] 
        decimalValue]; 
plot.barCornerRadius = 5.0; 
// Remove bar outlines 
CPTMutableLineStyle *borderLineStyle = [CPTMutableLineStyle lineStyle]; 
borderLineStyle.lineColor = [CPTColor clearColor]; 
plot.lineStyle = borderLineStyle; 

// Identifiers are handy if you want multiple plots in one graph 
plot.identifier = @"chocoplot"; 

[self.graph addPlot:plot]; 
+0

もう少しスヌーピングしました。 fieldEnumは1に等しい.CPTBarPlotFieldBarLocationおよびCPTBarPlotFieldBarTipの値はそれぞれ2および3である。どのようにfieldEnumは値を取得しますか。 CPTBarPlotメソッドはどのようにこの値を取得/保持しますか? –

+0

"chocoplot"は棒グラフですか?どのバージョンのCore Plotを使用していますか?バープロットフィールドの列挙型は0.9以降に変更されました。 –

+0

chocoplotは、グラフ/プロットのデータソースとデリゲートメソッドの識別子です。私はMercurialを使用してダウンロードしたCorePlotの最新バージョンを使用しています。 –

答えて

2

列挙型の定義は、1月に変更されました:

typedef enum _CPTBarPlotField { 
    CPTBarPlotFieldBarLocation, ///< Bar location on independent coordinate axis. 
    CPTBarPlotFieldBarTip,  ///< Bar tip value. 
    CPTBarPlotFieldBarBase  ///< Bar base (used only if @link CPTBarPlot::barBasesVary barBasesVary @endlink is YES). 
} CPTBarPlotField; 

identifierテストが合格していることを確認します。それが、何らかの理由でコンパイラーが古いenum値を持っている場合は、クリーンビルドを試してください。

+0

それでは、Eric氏は、CorePlotの最新バージョンごとに最新の列挙型を定義していますか?私がこれらの列挙体を使用した場合、彼らには何もないので何が起こるでしょうか? –

+0

明示的な値を指定しないと、enumは常にゼロからカウントを開始します。位置は0、先端は1、底は2です。 –

+0

私は私のヘッダーファイルをチェックしました。そしてCPTBarPlot.hはenumの値を含んでいたので、上記のバージョンでは気にしませんでした。私は水銀ダウンロードをもう一度行い、プロジェクトに追加しました。HEIGHTの列挙条件は今や真で、私は棒グラフを取得します。 1つの奇妙なことは、エラーなしできれいにコンパイルしますが、私はCPTXYAxisSet変数を割り当てますが、変数とそのプロパティは認識されないということです。助けてくれてありがとう!!! –

0

... CPTBarPlotを定義するコードの抜粋です。あなたは値1がCPTBarPlotで返すことができない見ることができるようにここで

CPTBarPlotField

/**  @brief Enumeration of bar plot data source field types 
**/ 
typedef enum _CPTBarPlotField { 
    CPTBarPlotFieldBarLocation = 2, ///< Bar location on independent coordinate axis. 
    CPTBarPlotFieldBarTip   = 3, ///< Bar tip value. 
    CPTBarPlotFieldBarBase  = 4  ///< Bar base (used only if barBasesVary is YES). 
} CPTBarPlotField; 

の宣言です。プロットを初期化するコードを確認してください。

+0

私はBarPlot割り当てコードを元の質問boveに追加しました。 –

+0

[plot.identifier isEqual:@ "chocoplot"]がtrueを返すことを確認しましたか? – edo42

+0

はい。気づいたら、毎回識別子テストが成功するため、実際の条件内にNSLogを配置しました。私はidentifierが検証された後、どの条件が満たされているかを見たいと思っていました。いずれの表示もログに送られません。 –

関連する問題