Category正在实现一个也可以在主类中实现的方法:`viewWillAppear:`

Man*_*ani 4 oop objective-c ios objective-c-category

我正在尝试对UIViewController进行类别覆盖viewWillAppear:.但得到这个警告.

Category正在实现一种也可以在主类中实现的方法

@implementation UIViewController (ViewWillAppearCategory)

-(void)viewWillAppear:(BOOL)animated
{
    //.........
}

@end
Run Code Online (Sandbox Code Playgroud)

我希望在视图中出现一些东西出现在所有屏幕上,所以我不想在所有屏幕上触摸.这就是为什么,选择类别.

我可以在子类中实现一些方法,我可以在所有VC(所有屏幕)中调用该方法.但我不想要这个.它会在视图中自动调用会出现调用.这是否有任何想法,或在上面做了任何错误?

注意:此代码出于某些测试目的而出现在开发阶段.所以我在使用app store时会删除此代码.因此,在移除过程中应该更容易完成任务,即我不会触摸所有屏幕.在提交到应用商店期间,我不会保留此代码.

小智 11

在这种情况下,您必须尝试Method Swizzling,这是一个非常好的形成概念,允许您更改现有选择器的实现.

有关更多详细信息和代码,请访问以下链接.

http://nshipster.com/method-swizzling/


Rob*_*obP 6

类别用于添加新方法,而不是覆盖现有方法.也许使用以下代码创建UIViewController的子类,比如MyUIViewController:

-(void) viewWillAppear:(BOOL) animated {
    // do your "category" stuff
}
Run Code Online (Sandbox Code Playgroud)

然后使用以下代码创建MyUIViewController的所有其他UIViewControllers子类:

-(void) viewWillAppear:(BOOL) animated {
    [super viewWillAppear:animated];
    // rest of code for this class
}
Run Code Online (Sandbox Code Playgroud)