0

CPTGraphHostingViewCorePlot グラフを保持するために、ViewController にカスタム クラスの UIView が含まれている単一のビュー アプリケーションがあります。その UIView のコンテンツは、 と呼ばれる NSObject サブクラスによって管理されSimpleScatterPlotます。このSimpleScatterPlotオブジェクトは、グラフの構成に必要なすべてのパラメーター (軸の範囲、ラベル、ポイントの数など) を保持します。

ViewController.h

#import <UIKit/UIKit.h>
#import "CorePlot-CocoaTouch.h"
#import "SimpleScatterPlot.h"

@interface ViewController : UIViewController
{
    IBOutlet CPTGraphHostingView *_graphHostingView;
    SimpleScatterPlot *_scatterPlot;   
    NSMutableData *dataConexion;
}

@property (nonatomic,strong) NSArray *valor;
@property (nonatomic,strong) NSArray *strAnoMes;
@property (nonatomic,strong) NSArray *indicador;
@property (nonatomic, retain) SimpleScatterPlot *scatterPlot;

@end

ViewController.m には、いくつかの JSON データからいくつかの配列を初期化するメソッドがいくつかあります。

#import "ViewController.h"

@interface ViewController ()

@end

@implementation ViewController

@synthesize indicador,valor,strAnoMes;

- (void)viewDidLoad
{
    [super viewDidLoad];

    [UIApplication sharedApplication].networkActivityIndicatorVisible = YES;

    NSString *urlString = @"http://xxxx/ios/datosgrafica.php";

    NSURL *url = [NSURL URLWithString:urlString];
    NSURLRequest *request = [NSURLRequest requestWithURL:url];
    (void)[[NSURLConnection alloc] initWithRequest:request delegate:self];   
}

- (void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response
{
    dataConexion = [[NSMutableData alloc] init];
}

- (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)theData
{
    [dataConexion appendData:theData];
}

- (void)connectionDidFinishLoading:(NSURLConnection *)connection
{
    [UIApplication sharedApplication].networkActivityIndicatorVisible = NO;

    indicador = [NSJSONSerialization JSONObjectWithData:dataConexion options:nil error:nil];

    // ARRAYS OF INTEREST
    strAnoMes = [indicador valueForKey:@"StrAnoMes"];
    valor = [indicador valueForKey:@"Valor"];

    self.scatterPlot = [[SimpleScatterPlot alloc] initWithHostingView:_graphHostingView andData:pointArray];
    [self.scatterPlot initialisePlot];
}

- (void)connection:(NSURLConnection *)connection didFailWithError:(NSError *)error
{
    UIAlertView *errorView = [[UIAlertView alloc] initWithTitle:@"Error" message:@"The download could not complete - please make sure you're connected to either 3G or Wi-Fi." delegate:nil cancelButtonTitle:@"Dismiss" otherButtonTitles:nil];
    [errorView show];
    [UIApplication sharedApplication].networkActivityIndicatorVisible = NO;
}

ではSimpleScatterPlot.m、配列 " valor" を使用して軸の範囲を構成したいと考えています。また、配列 " strAnoMes" を使用して xAxis にカスタム ラベルを描画したいと考えています。

ViewController で定義された配列を SimpleScatterPlot に渡すにはどうすればよいですか?

しようとしまし#import "ViewController.h"たが、エラーが発生します。他のアイデアはありますか?この状況にアプローチする最善の方法は何ですか?

4

3 に答える 3

1

SimpleScatterPlot では 2 つのプロパティを取得できます。

SimpleScatterPlot.h

@property (nonatomic, retain) NSArray * strAnoMes;
@property (nonatomic, retain) NSArray * valor;

SimpleScatterPlot.m

@synthesize strAnoMes;
@synthesize valor;

ViewController.m では、connectionDidFinishLoading: で scatterPlot を作成した後、以下のように上記のプロパティに値を割り当てます。

self.scatterPlot.strAnoMes = strAnoMes;
self.scatterPlot.valor = valor;
于 2013-02-25T18:09:21.617 に答える
1

これを行う 1 つの方法は、単純なデータ オブジェクトを作成し、それをオブジェクトに直接渡すことSimpleScatterPlotです。

データ オブジェクト:

@interface SimpleScatterPlotData : NSObject
@property (...) NSArray *valor;
@property (...) NSArray *strAnoMes;
@end

@implementaton SimpleScatterPlotData
@synthesize valar;
@synthesize strAnoMes;
-(void)dealloc
{
   ...
   ...
   [super dealloc];
}
@end

SimpleScatterPlotクラスに load メソッドを実装します。

@interface SimpleScatterPlot
-(void)loadData:(SimpleScatterPlotData *)data;
@end

@implementation SimpleScatterPlot
-(void)loadData:(SimpleScatterPlotData *)data
{
    NSArray *valor = data.valor;
    NSArray *strAnoMes = data.strAnoMes;
    /*
      Do something
    */
}
@end

次に、ViewControllerクラスで:

- (void)connectionDidFinishLoading:(NSURLConnection *)connection
{
    [UIApplication sharedApplication].networkActivityIndicatorVisible = NO;
    indicador = [NSJSONSerialization JSONObjectWithData:dataConexion options:nil error:nil];

    // ARRAYS OF INTEREST
    strAnoMes = [indicador valueForKey:@"StrAnoMes"];
    valor = [indicador valueForKey:@"Valor"];

    SimpleScatterPlotData *data = [[[SimpleScatterPlotData alloc] init] autorelease];
    data.valor = valor;'
    data.strAnoMes = strAnoMes;

    self.scatterPlot = [[SimpleScatterPlot alloc] initWithHostingView:_graphHostingView andData:pointArray];
    [self.scatterPlot loadData:data];
}
于 2013-02-25T18:34:36.757 に答える
0

また、現在のイニシャライザを変更するか、SimpleScatterPlot クラスに新しいイニシャライザを追加して、オブジェクトを割り当てるときにこれらの配列を渡すこともできます。したがって、イニシャライザへの呼び出しは次のようになります。

self.scatterPlot = [[SimpleScatterPlot alloc] initWithHostingView:_graphHostingView andData:pointArray andValor:valor andstrAnoMes:strAnoMes];

次に、イニシャライザで、オブジェクトのプロパティを値で渡されたものに設定できます。

于 2013-02-25T19:02:26.537 に答える