【发布时间】:2016-11-28 04:50:35
【问题描述】:
我正在开发一个 SDK,每当在与我们的 SDK 集成的应用程序中调用任何UIViewController 的viewDidLoad 方法时,我都必须调用我们的服务器。我正在尝试使用如下所示的类别:
#import "DymmyViewController.h"
@interface DymmyViewController ()
@end
@protocol DummyDelgate;
@interface UIViewController (DummyAddition)
-(void)viewDidLoad;
@end
@implementation DymmyViewController
- (void)viewDidLoad {
[super viewDidLoad];
// Do any additional setup after loading the view.
}
@end
@implementation UIViewController (DummyAddition)
-(void)viewDidLoad{
//server call
}
@end
这没有任何反应,我收到一条警告说“Category is implementing a method which will also be implemented by its primary class”
我知道这不是完成这件事的方法。我还有其他方法可以做到这一点吗?可能正在使用NSNotification?
【问题讨论】:
-
你为什么要这样做-----interface UIViewController (DummyAddition) -(void)viewDidLoad; @end ?
-
1) 在类类别中声明
viewDidLoad是没有意义的,因为UIViewController已经有了这样的方法。 2) 永远不要试图覆盖类别中的现有方法。这是未定义的行为。类别应该只添加新的方法/属性,切勿尝试替换它们。 -
而是有一个基础视图控制器,你的所有视图控制器都从它继承,并在基础视图控制器中做你需要做的任何事情
-
你到底想要什么?
-
只做分析 SDK 的工作。为用户提供一个方法,他将在每个 viewDidLoad 中调用该方法。为什么要把事情复杂化
标签: ios objective-c sdk categories