gpt4 book ai didi

iphone - 如何在我使用 NSClassFromString 动态创建的类中调用方法?

转载 作者:搜寻专家 更新时间:2023-10-30 19:53:39 26 4
gpt4 key购买 nike

我进行动态类加载的原因是因为我正在创建一组可以在多个类似项目中使用的文件,所以执行#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):

@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

正在使用中:

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];

关于iphone - 如何在我使用 NSClassFromString 动态创建的类中调用方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4909972/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com