Передайте NSArrays от ViewController до класса NSObject

У меня есть единственное применение представления, где ViewController содержит UIView таможенного класса CPTGraphHostingView так, чтобы это держало граф CorePlot. Содержание которого UIView управляет названный подкласс NSObject SimpleScatterPlot . Этот SimpleScatterPlot объект держится, все параметры должны были формировать граф (ряды осей, этикетки, число очков, и т.д.)

ViewController.h

#import 
#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 я хотел бы использовать множество" доблесть ", чтобы формировать ряды осей, и я хотел бы использовать множество" strAnoMes ", чтобы потянуть таможенные этикетки в xAxis.

Что я должен сделать так, чтобы я мог передать те множества, определенные в ViewController в SimpleScatterPlot?

Я попытался #import "ViewController.h" , но это дает мне ошибки. Какие-либо другие идеи? Что лучший способ состоит в том, чтобы приблизиться к этой ситуации?

0
nl ja de

3 ответы

Один способ сделать это должно создать простой объект данных и передать его непосредственно в ваш 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];
}
1
добавлено

Можно взять два свойства в SimpleScatterPlot.

SimpleScatterPlot.h

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

SimpleScatterPlot.m

@synthesize strAnoMes;
@synthesize valor;

В ViewController.m, После создания scatterPlot в connectionDidFinishLoading: назначьте ценности на вышеупомянутые свойства как ниже.

self.scatterPlot.strAnoMes = strAnoMes;
self.scatterPlot.valor = valor;
1
добавлено
Вы регистрировали ценности, назначая множества на SimpleScatterPlot.
добавлено автор nkongara, источник
I' m выполнение, что вы предложили, но множества в SimpleScatterPlot подходят пустые.
добавлено автор Juan Andres, источник
Nevermind! Я только что поместил код несколько линий выше создания scatterPlot.. Проблема решена! Спасибо!
добавлено автор Juan Andres, источник

Вы могли также изменить свой текущий инициализатор или добавить новый инициализатор к вашему классу SimpleScatterPlot так, чтобы вы передали те множества в когда вы alloc объект. Так ваш требование к вашему инициализатору посмотрело бы что-то как:

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

Тогда в вашем инициализаторе можно установить свойства объектов в переданных в ценностях.

0
добавлено