【发布时间】:2009-06-23 22:06:08
【问题描述】:
似乎 3.0 NDA 已被取消,所以这个问题应该是安全的。如果这违反了 NDA,请告诉我,以便我可以删除帖子,尽快。
我在 NSOperationQueue 上有一个非常简单的 KVO 实现。我的问题是,在针对 2.2.1 SDK 进行编译时,对于使用 3.0 的设备或使用 2.2.1 的设备,我得到了不同的 NSOperationQueue 结果。我已经在 1 部 2.2.1 的 iPod Touch、1 部 3.0 的 iPod Touch 和两组具有类似设置的 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 的设备将返回正确的 operationCount 和正确的操作。运行 2.2.1 的设备对于操作将始终返回 nil,对于 operationCount 将始终返回 0。
似乎无法确定为什么会这样。所有构建都是针对 2.2.1 编译的。
注意
根据下面马特的回复; 'object' 在 2.2.1 上为零。在 3.0 上它不是 nil。
【问题讨论】:
-
尝试使用 NSLog() 来检查对象的值,而不是 GDB。我在使用 Xcode 3.1.3 构建 2.2.1 时遇到了一个奇怪的问题:openradar.me/7017295
标签: iphone objective-c key-value-observing