1 つの UIViewController に使用する dataSource がいくつかあります。私のView Controllerは、実行時に特定のプロパティの状態を追跡するためにKeyValue Observingを使用しています。dataSource を交換するときは、それらのプロパティの監視を停止する必要があります。問題は、実行時の dataSource のクラスがわからないため、次のようなものは無効です。
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];
}
コンパイラは、オブジェクトのインターフェイスを知るために具象クラスを必要とします。この特定のケースで dataSource のクラスを取得してから、上記の removeObserver:forKeyPath: セレクターの dataSource を typcast するにはどうすればよいですか? クラスの名前を NSString インスタンスにキャッシュし、切り替えるたびにそれを参照するよりも、動的でスマートなものを好みます。つまり、私はいつでも次のようなことができます:
NSString *lastDataSource = @"MyClass";
Class foo = [NSClassFromString(lastDataSource)];
ありがとう。