我进行动态类加载的原因是因为我正在创建一组可在多个类似项目中使用的文件,因此执行 #import 然后正常实例化是行不通的。动态类允许我执行此操作,只要我可以调用这些类中的方法即可。每个项目在 pch 中都有一个不同的“kMediaClassName”名称,这样我就可以根据我所在的项目动态加载不同的类:
#define kMediaClassName @"Movie"
这是我用来动态获取类实例的代码:
Class mediaClass = NSClassFromString(kMediaClassName);
id mediaObject = [[[mediaClass alloc] init] autorelease];
然后我尝试调用该动态类中的方法:
[mediaObject doSomething];
当我将其输入 Xcode 时,编译器会显示一条警告,表明该类没有此方法,尽管它有。我可以在我的 Movie.h 文件中看到它。到底是怎么回事?如何从动态实例化的类中调用方法?
如果我需要传递多个参数怎么办?
[mediaObject loadMedia:oneObject moveThe:YES moveA:NO];
我在这里先向您的帮助表示感谢。
你可以声明一个协议,如下所示:
@protocol MONMediaProtocol
/*
remember: when synthesizing the class, you may want
to add the protocol to the synthesized class for your sanity
*/
- (BOOL)downloadMediaAtURL:(NSURL *)url toPath:(NSString *)path loadIfSuccessful:(BOOL)loadIfSuccessful;
/* ...the interface continues... */
@end
in use:
Class mediaClass = NSClassFromString(kMediaClassName);
assert(mediaClass);
id<MONMediaProtocol> mediaObject = [[[mediaClass alloc] init] autorelease];
assert(mediaObject);
NSURL * url = /* expr */;
NSString * path = /* expr */;
BOOL loadIfSuccessful = YES;
BOOL success = [mediaObject downloadMediaAtURL:url toPath:path loadIfSuccessful:loadIfSuccessful];
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)