发出呼叫Apple方法的警告

时间:2014-05-13 14:50:46

标签: ios objective-c warnings presentviewcontroller

这是一个非常有趣的问题。我的应用与presentViewController:animated:completion:dismissViewControllerAnimated:completion:存在问题。发生的事情是调用presentViewController,并且根据服务器信息,View Controller可能会被解雇。我会收到一条错误,上面写着“在完全呈现之前无法解除”(动画设置为YES)。

我实现了一个队列来处理现在,并解除了调用。这很完美,我对这个解决方案非常满意。然后我意识到另一个问题,如果我不小心直接调用Apple的方法(我有一个名为myPresentViewController:animated:completion:的方法,以及myDismissViewControllerAnimated:completion:来处理排队)。

如果我直接调用Apple的方法,有没有办法设置警告方法?我已经尝试创建一个类别(我也试过一个扩展),定义Apple的存在,并解除方法,并向它们添加一个已弃用的消息。这两种方式都不奏效。我已经考虑过调整这些方法,但这不起作用,因为如果混合方法将它添加到队列中,它将如何知道何时调用apple的实现?我意识到警告会出现在我需要调用Apple方法的地方,但是我可以使用#pragma来禁止我需要的两行警告。

1 个答案:

答案 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。

您还可以使用这些基类添加您可能需要的任何其他应用级功能。