我有几个用于一个 UIViewController 的数据源。我的视图控制器使用 KeyValue Observing 来跟踪运行时某些属性的状态。当我交换数据源时,我需要停止观察这些属性。问题是,我不确定运行时数据源的类,因此这样的事情是无效的:
if (aDataSource != dataSource) {
// Ensure we stop observing the existing dataSource, otherwise bad stuff can happen.
[dataSource removeObserver:self forKeyPath:@"someKeyPath"]; // not valid, compiler doesn't know what class dataSource is.
[dataSource release];
dataSource = [aDataSource retain];
}
编译器需要一个具体的类才能知道对象的接口。在这种特殊情况下,如何获取数据源的类,然后为上面的 removeObserver:forKeyPath: 选择器键入数据源?我更喜欢动态/更智能的东西,而不是在 NSString 实例中缓存类的名称并在我切换时引用它。意思是,我总是可以做类似的事情:
NSString *lastDataSource = @"MyClass";
Class foo = [NSClassFromString(lastDataSource)];
谢谢。