2013-02-25 64 views
0

我有一个单视图应用程序,其中ViewController包含自定义类CPTGraphHostingView的UIView,以便它包含CorePlot图形。该UIView的内容由名为SimpleScatterPlot的NSObject子类管理。此SimpleScatterPlot对象保存将NSArrays从ViewController传递到NSObject类

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中使用stom标签。

我该怎么做才能将ViewController中定义的数组传递给SimpleScatterPlot?

我试过#import "ViewController.h"但它给了我错误。任何其他想法?处理这种情况的最佳方式是什么?

回答

1

您可以在SimpleScatterPlot中使用两个属性。

SimpleScatterPlot.h

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

SimpleScatterPlot.m

@synthesize strAnoMes; 
@synthesize valor; 

在ViewController.m,在connectionDidFinishLoading创建散点图后:,分配的值,以如下上述性能。要做到这一点

self.scatterPlot.strAnoMes = strAnoMes; 
self.scatterPlot.valor = valor; 
+0

我正在做你所建议的,但SimpleScatterPlot中的数组是空的。 – 2013-02-25 19:44:05

+0

您是否在将数组分配给SimpleScatterPlot时记录了值。 – nkongara 2013-02-25 19:49:59

+0

没关系!我刚刚将代码放在scatterPlot的创建之上几行。问题解决了!谢谢! – 2013-02-25 19:54:48

1

一种方法是创建一个简单的数据对象,并将其直接传递到你的SimpleScatterPlot对象:

数据对象:

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

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

SimpleScatterPlot类实现负载方法:

@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]; 
} 
0

你也可以改变你的当前初始化或添加新的初始化你SimpleScatterPlot类,让你过,当你的Alloc对象在这些阵列。所以你调用你的初始化看起来是这样的:

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

然后在你的初始化,您可以设置对象属性,这些价值观通过。

相关问题