4

这是我遇到的一个非常有趣的问题。我的应用程序与presentViewController:animated:completion:和有问题dismissViewControllerAnimated:completion:。发生的事情是 presentViewController 被调用,并且根据服务器信息,视图控制器可能会被关闭。我会收到一条错误消息,说“在完全呈现之前无法关闭”(动画设置为是)。

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

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

4

1 回答 1

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

不需要编译指示。

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

于 2014-05-13T16:25:04.683 回答