2012-02-25 10 views
1

私はインターネットとこれらのフォーラムを精査しました。私はGalleryPlotのサンプルコードを調べました。私はまだこれに問題があります。コア配列のタッチイベントのデータ配列にアクセスするとクラッシュする

私はiPhoneアプリケーションで散布図を描画するためにCore Plotを使用しています。グラフは美しく描きます。 私は次のことを行っている:

  • は私のビューコントローラクラスにCPTScatterPlotDatasourceとCPTScatterPlotDelegateプロトコルを追加することにより、プロット点に触れできる機能を追加しました。実施
  • - (ボイド)散布(CPTScatterPlot *)プロットplotSymbolWasSelectedAtRecordIndex:(NSUInteger)指数{}私のビューコントローラクラスで

のNSLog文メソッドが呼び出されているインデックスが送信されることを示しています有効な整数。

プロットのデータを含むNSArrayにアクセスするコードを追加すると、アプリケーションはEXC_BAD_ACCESSでクラッシュします。データ配列は、メソッドを実装するView Controllerのメンバ変数です。

私は配列にアクセスしようとする直前にデータをリロードしようとしましたが、それで解決できませんでした。

- (void)scatterPlot:(CPTScatterPlot *)plot plotSymbolWasSelectedAtRecordIndex:(NSUInteger)index { 

    NSLog(@"Touched by me: index = %d", index); 
    [myGraph reloadDataIfNeeded]; 

    NSNumber* x = [[dataForOurBabyPlot objectAtIndex:index]valueForKey:@"x"]; 
} 

クラッシュ "のNSNumber * X" の行で発生します

は、ここに私のデリゲートメソッドです。私は何をしないのです

@interface GraphView : UIViewController <CPTScatterPlotDataSource, 
             CPTScatterPlotDelegate> { 
IBOutlet CPTGraphHostingView* myHostingView; 
    CPTXYGraph* myGraph; 

    NSArray* dataForOurBabyPlot; 
} 
@property (nonatomic, retain) IBOutlet CPTGraphHostingView* myHostingView; 

@property (nonatomic, retain) NSArray* dataForOurBabyPlot; 

// class methods 
@end 

:ここ

は私のビューコントローラクラスの宣言のですか?

+0

dataForOurBabyPlotはどのような種類のデータを管理しますか? – SteAp

+0

dataForOurBabyPlotはNSDictionaryの配列です。各辞書には2つのNSNumberが含まれています。 – Blamdarot

答えて

1

-reloadDataIfNeededへの電話は不要です。この時点までに、Core Plotは必要なすべてのデータをすでに持っています。

EXC_BAD_ACCESSクラッシュは、dataForOurBabyPlotが不正なデータを指しているために発生します。それがリリースされ、システムが他の何かのためにそのメモリを再利用した可能性があります。あなたのメモリ管理をチェックし、あなたがそれを完了するまで配列が解放されていないことを確認してください。

+0

ありがとうございます。私はかなりObjective-Cを使い慣れていて、合成メソッド(setDataForOurBabyPlot :)の代わりに '='を使ってdataForOurBabyPlotを設定していました。学んだ教訓。 – Blamdarot

関連する問題