这是一个非常有趣的问题。我的应用与presentViewController:animated:completion:
和dismissViewControllerAnimated:completion:
存在问题。发生的事情是调用presentViewController,并且根据服务器信息,View Controller可能会被解雇。我会收到一条错误,上面写着“在完全呈现之前无法解除”(动画设置为YES)。
我实现了一个队列来处理现在,并解除了调用。这很完美,我对这个解决方案非常满意。然后我意识到另一个问题,如果我不小心直接调用Apple的方法(我有一个名为myPresentViewController:animated:completion:
的方法,以及myDismissViewControllerAnimated:completion:
来处理排队)。
如果我直接调用Apple的方法,有没有办法设置警告方法?我已经尝试创建一个类别(我也试过一个扩展),定义Apple的存在,并解除方法,并向它们添加一个已弃用的消息。这两种方式都不奏效。我已经考虑过调整这些方法,但这不起作用,因为如果混合方法将它添加到队列中,它将如何知道何时调用apple的实现?我意识到警告会出现在我需要调用Apple方法的地方,但是我可以使用#pragma来禁止我需要的两行警告。
答案 0 :(得分:3)
创建一个扩展UIViewController
的视图控制器基类。然后确保所有视图控制器都扩展此基类。如果需要,对UITableViewController
执行相同的操作。
在这些基类中,您可以实现这两个方法,并将弃用标志添加到.h文件中的方法声明中。
TGViewController.h
@interface TGViewController : UIViewConrtoller
- (void)presentViewController:(UIViewController *)viewControllerToPresent animated: (BOOL)flag completion:(void (^)(void))completion NS_DEPRECATED_IOS(5_0, 6_0);
- (void)dismissViewControllerAnimated: (BOOL)flag completion: (void (^)(void))completion NS_DEPRECATED_IOS(5_0, 6_0);
@end
TGViewController.m
@implementation TGViewController
- (void)presentViewController:(UIViewController *)viewControllerToPresent animated: (BOOL)flag completion:(void (^)(void))completion {
[super presentViewController:viewControllerToPresent animated:flag completion:completion];
}
- (void)dismissViewControllerAnimated: (BOOL)flag completion: (void (^)(void))completion {
[super dismissControllerAnimated:flag completion:completion];
}
@end
不需要pragma。
您还可以使用这些基类添加您可能需要的任何其他应用级功能。