iOS: необъяснимо -[__NSOrderedSetM removeObjectAtIndex:]: индекс 0 вне границ для пустого упорядоченного набора
Я получил -[__NSOrderedSetM removeObjectAtIndex:]: index 0 beyond bounds for empty ordered set
в следующем коде:
- (void)moveAdapter:(SUBaseAdapter *)adapter
from:(NSMutableOrderedSet *)src
to:(NSMutableOrderedSet *)trg {
SS_ASSERT(adapter);
SS_ASSERT(src);
SS_ASSERT(trg);
dispatch_barrier_sync(self.adaptersQueue, ^{ // CONCURRENT QUEUE
if (![src containsObject:adapter]) {
NSString *message = [NSString stringWithFormat:@"moveAdapter: %@ not in src", adapter.providerName];
[[SULoggerManager sharedInstance] log:message level:SU_LOG_INTERNAL tag:TAG_INTERNAL];
return;
}
if ([trg containsObject:adapter]) {
NSString *message = [NSString stringWithFormat:@"moveAdapter: %@ already in trg", adapter.providerName];
[[SULoggerManager sharedInstance] log:message level:SU_LOG_INTERNAL tag:TAG_INTERNAL];
return;
}
[trg addObject:adapter];
[trg sortUsingDescriptors:@[self.sortDescriptor]];
[src removeObject:adapter]; //CRASH HERE
});
}
Итак, я не звоню явно removeObjectAtIndex:
, но возможно removeObject:adapter
делает?
Вот что я не понимаю:
- Я пытался добавить
anObject
к набору, затем называетсяremovedObject:anObject
дважды не было проблем. - Я подумал, может быть, это проблема параллелизма, когда два разных потока входят
removeObject
думая, что это в положении 1, а затем второй поток не удается, но я используюdispatch_barrier_sync
и я не удаляю объекты из 'src' где-либо еще.
Есть намеки?