エンドポイント URL 要求を処理するアプリに NSOperationQueue があります。リクエストの重複を避けるために、可能な限りキューをチェックして、このエンドポイント コールがすでに処理されているかどうかを確認します。
なんらかの理由で、通常、エンドポイント操作キューが地獄のようにスパムされている場合にのみ発生しますが、他の場合もランダムに発生します (これは、ある種の非常にまれな競合状態であることを意味します)。 . 次の行で発生します。
if (![endpointOperation.urlRequest respondsToSelector: @selector(URL)]) {
コードは次のとおりです。
-(BOOL)operationQueueContainsDuplicateOperations
{
for (EndpointOperation *endpointOperation in [EndpointOperationQueueManager instance].operationQueue.operations) {
if (![endpointOperation.urlRequest respondsToSelector: @selector(URL)]) {
return NO;
}
if (![self.urlRequest respondsToSelector: @selector(URL)]) {
return NO;
}
if ([[endpointOperation.urlRequest.URL absoluteString] isEqualToString:[self.urlRequest.URL absoluteString]] &&
(self.relatedProfileIds && [endpointOperation.relatedProfileIds isEqualToArray:self.relatedProfileIds])) {
return YES;
}
}
return NO;
}
このループの処理中にオペレーション キューが変更されているのではないかと思いましたが、それがどのように発生するかはわかりません。クラッシュを受信すると、関連するオブジェクトの内容を表示でき、問題なく表示されます。何か案は?