Hallo,
ich habe ein (Verständnis?)Problem mit NSClassFromString und isKindOfClass:
Es gibt verschiedene Modellklassen: z.B. LocalVideo, YouTubeVideo, VimeoVideo, etc.. Die sind Unterklassen der Klasse Video. Nun habe ich noch eine VideoPlayer-Klasse. Diese soll eine Factory sein, die je nachdem welche Art von Video reingereicht wird eine entsprechende Instanz eines Players zurückgibt. Beispiel:
In der create Methode von VideoPlayer wird die Instanz folgendermaßen instanziiert:
Nun teste ich in meinen Tests, ob die Instanz, die ich von create zurückbekomme tatsächlich vom Typ (um beim Beispiel zu bleiben) LocalVideoPlayer ist:
isKindOfClass gibt hier immer NO zurück. Laut description Methode des videoPlayer Objekts ist videoPlayer ein LocalVideoPlayer. Ändere ich den Test folgendermaßen
läuft er durch. Dabei ist es egal ob ich isSubclassOf verwende, wie es in einem anderen Beitrag hier vorgeschlagen wird. isKindOfClass liefert mir immer NO. Was hab ich übersehen?
ich habe ein (Verständnis?)Problem mit NSClassFromString und isKindOfClass:
Es gibt verschiedene Modellklassen: z.B. LocalVideo, YouTubeVideo, VimeoVideo, etc.. Die sind Unterklassen der Klasse Video. Nun habe ich noch eine VideoPlayer-Klasse. Diese soll eine Factory sein, die je nachdem welche Art von Video reingereicht wird eine entsprechende Instanz eines Players zurückgibt. Beispiel:
In der create Methode von VideoPlayer wird die Instanz folgendermaßen instanziiert:
Quellcode
- + (id)create:(Video*)aVideo {
- NSString *videoClassString = NSStringFromClass([aVideo class]);
- NSString *videoPlayerClassString = [NSString stringWithFormat:@"%@Player", videoClassString];
- Class videoClassPlayer = NSClassFromString(videoPlayerClassString);
- id concreteVideoPlayer= [[videoClassPlayer alloc] init];
- return concreteVideoPlayer;
- }
Nun teste ich in meinen Tests, ob die Instanz, die ich von create zurückbekomme tatsächlich vom Typ (um beim Beispiel zu bleiben) LocalVideoPlayer ist:
isKindOfClass gibt hier immer NO zurück. Laut description Methode des videoPlayer Objekts ist videoPlayer ein LocalVideoPlayer. Ändere ich den Test folgendermaßen
läuft er durch. Dabei ist es egal ob ich isSubclassOf verwende, wie es in einem anderen Beitrag hier vorgeschlagen wird. isKindOfClass liefert mir immer NO. Was hab ich übersehen?
