2011-05-03 3 views
0

HI, я в настоящее время использую ядро-график рисовать динамический график и работаю нормально, теперь я имею в вид, чтобы добавить 2 график на 2 отдельных просмотрах2 ядра-сюжетные графики на 2 отдельного UIViews с обновлением динамических данных

Я начал с «Utility Application» с графическим чертежом Mainview График-1 и чертеж Flipview График-2

График основного графика прекрасно работает и обновляет график и перезагружает каждые 2 секунды, но когда я касаюсь «flipviewWindow», график2 всегда начинается с новых значений и с новым массивом graph2data (вероятно, из-за того, что graph2timer снова вызван ???), но graph1data поддерживает только один NSTimer и отлично работает.

Я не хочу выпускать значения, потому что я хочу видеть график с предыдущими значениями, как в Graph1.

Может ли кто-нибудь посоветовать о том, как реализовать 2 графика основного графика на двух отдельных пользовательских интерфейсах с динамическим обновлением данных? мой графика логик, как показано ниже

In MainViewController.m 
    -(void)viewDidLoad{ 
    [super viewDidLoad]; 
    [self ConstructGraph1] 
} 

-(void)ConstructGraph1 { 
     graph1 = [[CPXYGraph alloc] initWithFrame:CGRectZero]; 
    CPTheme *theme = [CPTheme themeNamed:kCPStocksTheme]; 
    [graph1 applyTheme:theme]; 
    mainViewWindow.hostedGraph=graph1; 
    . 
    . 
    . 
    . 
    . 
     myTimer1=[NSTimer scheduledTimerWithTimeInterval:2 target:self selector:@selector(graph1Timer:) userInfo:nil repeats:YES]; 
} 

-(void) graph1Timer: (NSTimer *) Timer{ 
    NSTimeInterval aTimeInterval1 = [[NSDate date] 
            timeIntervalSinceReferenceDate]; 
    Get JSON request and add object at every 2 sec, after succesfully fetching 
    [graph1data addObject:...] 
    [graph1 reloadData]; 
} 

- (void)flipsideViewControllerDidFinish:(FlipsideViewController *)controller 
{ 
    [self dismissModalViewControllerAnimated:YES]; 
} 

- (IBAction)showFlipWindow:(id)sender 
{  
    FlipsideViewController *controller = [[FlipsideViewController alloc] initWithNibName:@"FlipsideView" bundle:nil]; 
    controller.delegate = self; 
    controller.modalTransitionStyle = UIModalTransitionStyleFlipHorizontal; 
    [self presentModalViewController:controller animated:YES]; 
    [controller release]; 
} 

In FlipViewController.m 
-(void)viewDidLoad{ 
    [super viewDidLoad]; 
    self.view.backgroundColor = [UIColor viewFlipsideBackgroundColor]; 
    [self ConstructGraph2] 

} 
//ConstructGraph2 uses the same logic to draw the graph and to fetch the results 

-(void) ConstructGraph2 { 
     graph2 = [[CPXYGraph alloc] initWithFrame:CGRectZero]; 
    CPTheme *theme = [CPTheme themeNamed:kCPStocksTheme]; 
    [graph1 applyTheme:theme]; 
    mainViewWindow.hostedGraph=graph1; 
    . 
    . 
    . 
    . 
    . 
     myTimer2=[NSTimer scheduledTimerWithTimeInterval:2 target:self selector:@selector(graph2Timer:) userInfo:nil repeats:YES]; 
} 

-(void) graph2Timer: (NSTimer *) Timer{ 
    NSTimeInterval aTimeInterval2 = [[NSDate date] 
            timeIntervalSinceReferenceDate]; 
    Get JSON request and add object at every 2 sec, after succesfully fetching 

    [graph2data addObject...]; 

    [graph2 reloadData]; 
} 

- (IBAction)showMainWindow:(id)sender 
{ 
    [self.delegate flipsideViewControllerDidFinish:self]; 
} 
+0

В чем заключаются рамки myTimer1 и myTimer2? –

+0

@Paul Ardeleanu myTimer1 и myTimer2 возвращают значения JSON в соответствующий массив (для построения графика), пересчитывают график Xrange и перезагружают график. (так что графики движутся вместе с появлением точек данных). Фактически, мне нужно только запустить вызов этого таймера один раз и оставить их runnning.but, когда я делаю флип, только таймер2 вызывается снова (случайно), graph1 и timer1 просто прекрасны, и есть только один экземпляр из них работает ... так что не уверен, как это сделать. – Linus

+0

Linus, я думаю, вам следует отделить процесс поиска от дисплея. Кроме того, вы должны запускать сбор данных по отдельному потоку (асинхронно). –

ответ

0

Я оптимизировал мой пример путем разделения выборки данных с основным основным сюжетом и добавил NSNotification для обновлялся в данных, я имею некоторые проблемы с утечкой памяти (HTTP://stackoverflow.com/questions/5927476/yajl-memory-leak-problem).

Кроме того, у меня есть следующие изменения в контроллере, так что он не перезагружает весь график каждый раз, когда нажимается «Показать Grpah2».

if(controller==nil){ 
    controller=[[FlipsideViewController alloc] initWithNibName:@"FlipsideViewController" bundle:nil]; 
    controller.delegate = self; 
    controller.modalTransitionStyle = UIModalTransitionStyleFlipHorizontal; 
    [self presentModalViewController:controller animated:YES]; 
} 
else{ 
    controller.delegate = self; 
    controller.modalTransitionStyle = UIModalTransitionStyleFlipHorizontal; 
    [self presentModalViewController:controller animated:YES]; 
} 
+0

Это похоже на обновление вашего вопроса, а не ответ на него. Это должно было быть добавлено в качестве редактирования исходного вопроса. – mttrb