gpt4 book ai didi

ios - 无法通过主类的选择器调用类别方法

转载 作者:行者123 更新时间:2023-11-28 21:56:57 25 4
gpt4 key购买 nike

我有一个方法:

+ (id) showModalFromController: (UIViewController*) controller
{
AxEmpAuthorizationController * autorizationController = [[self.class alloc] initWithNibName:NSStringFromClass(self.class) bundle:nil];
[autorizationController performSelectorOnMainThread: @selector(showModalFromController:) withObject: controller waitUntilDone: YES];
return [autorizationController authorelease];
}

我有一个类别AxEmpAuthorizationController+CustomLoginVC.h,我在其中覆盖了方法:

- (void) showModalFromController: (UIViewController*) controller
{
NavigationTopViewController* navigationController = [[NavigationTopViewController allocWithZone: NULL] initWithRootViewController: self];
[controller presentModalViewController: navigationController animated: ![self.class isMain]];
[navigationController release];
}

问题是category中的方法从来没有被调用过,我找不到问题所在。有帮助吗?

最佳答案

这里的一个问题是您没有覆盖该方法。选择器将是相同的(我相信)- @selector(showModalFromController:),但方法不同。一个有不同的返回类型,一个是类方法(以'+'开头),一个是实例方法(以'-'开头)。

您需要确保您的替换方法具有签名:

+ (id) showModalFromController: (UIViewController*) controller

而不是

- (void) showModalFromController: (UIViewController*) controller

一旦你解决了这个问题,你就更近了一步。

正如 rmaddy 上面评论的那样,您可能不想使用类别来覆盖方法。

如果您正在尝试替换行为,请考虑子类化并在您需要的地方使用新的子类。

如果您尝试隐蔽地执行某些操作 - 在整个应用程序中替换此方法,请考虑方法调配(请非常仔细地考虑此选项)。

关于ios - 无法通过主类的选择器调用类别方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26221102/

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