私はここで少し混乱しています、私はキューを使用しています、そして私は私が少し失われるポイントに到達しました。
getPeople
サーバーからユーザーの写真を取得する必要があるという名前のメソッドがあります。アプリをブロックしないために、私はこれを使用しました:
-(IBAction)seeMorePeople{
dispatch_queue_t getPeopleQueue = dispatch_queue_create("Pinta Ocupantes", NULL);
dispatch_async(getPeopleQueue, ^{
[self getPeople];
});
dispatch_release(getPeopleQueue);
}
前のコードは、ユーザーがボタンをタップするたびに実行されます。「このアルバムの写真をください」のように、次に「他のアルバムの写真が欲しい」をタップすると、さまざまな写真とさまざまな量の写真が表示されます。ユーザーがボタンを非常に速くタップすると、2番目のキューがすでに開始されているときに、最初のキューはデータのフェッチを終了しません。を使用するgetPeople
と、データがNSMutableArrayに格納されるため、2つのキューが同時に実行されている場合、両方が同じ配列に書き込みを行っており、範囲外の例外が原因でアプリがクラッシュします。getPeople
データを通過する方法は次のようなものです。
-(void)getPeople:(NSDictionary *)peopleDictionary{
//I receive an NSDictionary and I go through it
NSArray *keys = [peopleDictionary allKeys];
int indexOfArray = 0;
for(NSString *key in keys){
//Complex operation that are not important
[peopleInArray insertObjetAtIndex:indexOfArray];//People in array is a global variable
indexOfArray++;
}
}
私が理解できないのは、これから抜け出す方法です。2番目のキューが入ったときに最初のキューを停止することを考えましたが、GCDにはこのオプションがありません...これを行う他の方法、できればメジャーなしでとにかく今のところ再コーディングはアイデアがないので、どんな手がかりも役に立ちます。