2013-07-29 2 views
1

У меня есть эта проблема, у меня есть класс с именем «GraphGenerator», который другой класс может вызвать передачу представления, чтобы получить это представление, заполненное графом. Этот класс GraphGenerator одноэлементноIphone sdk Общий экземпляр с переменной класса

+ (GraphGenerator *)sharedInstance 
    { 
     static GraphGenerator *sharedInstance; 
     static dispatch_once_t once; 
     dispatch_once(&once, ^{ 
      //allochiamo la sharedInstance 
      sharedInstance = [[self alloc] init]; 
     }); 
     return sharedInstance; 
    } 

это использование класса некоторые синтезируются свойство как _graphType и _graphData время делает график.

-(void)generateGraphInView:(CPTGraphHostingView*)hostingView ofType:(NSUInteger)type withData:(NSArray*)data andStyle:(NSUInteger)style{ 

     _graphData=[NSMutableArray arrayWithArray:data]; 
     _graphStyle=style; 
     _graphType=type; 

Проблема заключается в том, что, когда я начинаю множественный вызов в этом одноэлементных в ViewController, то GraphGenerator начать делать график, но не один момент времени. Кажется, что класс делать все граф совмещены, изменяя значение свойства синтезированного и делает проблему .. пример, я делаю это два вызова в методе

[[GraphGenerator sharedInstance]generateGraphInView:graphHost01 ofType:DAILY withData:[_dataDictionary valueForKey:@"day share"] andStyle:BARCHART]; 

[[GraphGenerator sharedInstance]generateGraphInView:graphHost02 ofType:WEEKLY withData:[_dataDictionary valueForKey:@"week share"] andStyle:BARCHART]; 

_graphType выставиться в ЕЖЕДНЕВНО Сразу после этого она выставиться, как ЕЖЕНЕДЕЛЬНО, но устанавливается слишком быстро, что первый вызов по-прежнему генерирует свой график, который на данный момент генерируется как еженедельно, а не ежедневно.

Так что я могу реализовать? Я думал о мьютексе или что-то в этом роде, но я не знаю, как это реализовать. Спасибо

+2

Привет, Зачем вам этот класс, чтобы быть одиночным? –

+0

Потому что я не знаю, возможно ли реализовать для него неинтернет-класс. Я должен назвать этот класс из всех контроллеров представления в своем приложении, и я думал, что лучший способ - сделать singleton – ReTanica

+0

, как я могу реализовать не- одноэлементное решение? если я вызову генератор графа, используя GraphGenerator * graphGen; [graphGen generateGraphInView ......]; Я не получаю никакого графика. – ReTanica

ответ

0

вы могли бы поставить синхронизацию в методе

-(void)generateGraphInView:(CPTGraphHostingView*)hostingView ofType:(NSUInteger)type withData:(NSArray*)data andStyle:(NSUInteger)style{ 
    @synchronized(self) { 

     // your code 
    } 
} 
+1

(но на самом деле это не решение, а не использование синглтона было бы лучше). –

+0

попробовал это уже, но не работает .. все еще испортил график. – ReTanica

1

Создание подкласса UIView управляющего созданием графика для себя дадут вам решение без Singleton.

Ранее мы использовали CorePlot для всплеска, и мы сделали это так.

Этот tutorial должен предоставить вам наибольший отрезок.

+0

О, я начал следовать этому учебнику, но потом подумал: «Я могу сделать это один». Сделать подваску uiview Хороший способ управлять созданием графа, вы правы .. Спасибо! – ReTanica

+0

Добро пожаловать! –

Смежные вопросы