调用苹果方法时,需要给出警告。

4
这是一个非常有趣的问题。我的应用程序在使用 presentViewController:animated:completion:dismissViewControllerAnimated:completion: 方法时出现了问题。情况是这样的,当 presentViewController 方法被调用时,根据服务器信息,可能会取消 View Controller。我会收到一个错误,说“在完全呈现之前无法取消”(动画设置为 YES)。
我实现了一个队列来处理 present 和 dismiss 的调用。这个解决方案非常完美,我非常满意。但是我意识到另一个问题,如果我不小心直接调用了苹果的方法(我有一个叫做 myPresentViewController:animated:completion:myDismissViewControllerAnimated:completion: 的方法来处理队列),该怎么办?
有没有办法在我直接调用苹果的方法时设置一个警告方法?我尝试过创建一个 Category(我也尝试过一个 Extension),定义苹果的 present 和 dismiss 方法,并向它们添加了一个不推荐使用的消息。这两种方法都没有起作用。我考虑过交换方法,但这不起作用,因为如果交换方法将其添加到队列中,它将如何知道何时调用苹果的实现?我意识到警告将只会出现在我需要调用苹果方法的地方,但我可以使用 #pragma 来抑制我需要的两行的警告。
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

不需要任何编译指示。

你还可以使用这些基础类来添加任何其他你可能想要的应用级别功能。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接