1

私はこの問題を抱えています。他のクラスがビューを渡して呼び出すことができる「GraphGenerator」という名前のクラスがあり、そのビューをグラフで満たすことができます。この GraphGenerator クラスはシングルトンです

+ (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 がグラフを作成し始めますが、一度に 1 つではありません。クラスはすべてのグラフをまとめて実行し、合成されたプロパティ値を変更して問題を引き起こしているようです..例として、メソッドでこの2つの呼び出しを行います

[[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 は DAILY として設定されます。直後に WEEKLY として設定されますが、設定が速すぎて、最初の呼び出しでまだグラフが生成されていません。この時点では、日次ではなく週次として生成されます。

では、何を実装できますか?私はミューテックスなどについて考えましたが、それを実装する方法がわかりません。ありがとうございました

4

2 に答える 2

1

グラフの作成を管理する UIView のサブクラスを作成すると、Singleton を使用しないソリューションが得られます。

以前にスパイクに CorePlot を使用しましたが、このように機能させました。

このチュートリアルでは、ほとんどの構造が得られるはずです。

于 2013-07-29T14:40:26.383 に答える
0

メソッドに同期を入れることができます

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

        // your code
    }
}
于 2013-07-29T14:09:56.327 に答える