Похоже, что 3,0 NDA был отменен, так что это должно быть безопасно спросить. Если это нарушает NDA, пожалуйста, дайте мне знать, чтобы я мог удалить сообщение, поспешное.
У меня есть очень тривиальная реализация для KVO в NSOperationQueue. Моя проблема заключается в том, что при компиляции с использованием 2.2.1 SDK я получаю разные результаты для рассматриваемого NSOperationQueue для устройства, использующего 3.0, или устройства, использующего 2.2.1. Я подтвердил это на 1 iPod Touch с 2.2.1, на одном 3.0 и двух комплектах iPhone с аналогичными настройками.
Код выглядит так:
// set observer
[self.myOperationQueue addObserver:self forKeyPath:@"operations" options:NSKeyValueObservingOptionNew context:NULL];
// implementation
-(void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context
{
if ([keyPath isEqualToString:@"operations"]) {
NSInteger operationCount = [[(NSOperationQueue*)object operations] count];
NSArray *operations = [(NSOperationQueue*)object operations];
}
}
В соответствии с приведенным выше кодом, устройство, работающее под управлением 3.0, вернет правильное число операций и правильные операции. Устройство под управлением 2.2.1 всегда будет возвращать nil для операций и 0 для operationCount.
Не могу точно определить, почему это так. Все сборки скомпилированы по 2.2.1.
Примечание
Согласно ответу Мэтта ниже; «объект» равен нулю в 2.2.1. Это не ноль на 3.0.