如何将此viewcontroller-reliant方法移动到辅助类?

时间:2013-04-03 01:02:42

标签: objective-c cocoa design-patterns uiviewcontroller abstraction

我正在使用Evernote API,并且我创建了一个辅助类,它将包含特定于Evernote API的方法,以尽可能地将代码保留为抽象。

但是有一种方法需要从视图控制器调用以显示登录表单,如果发生错误则需要调用alertView。这是代码:

- (IBAction)loginToEvernote:(id)sender {

EvernoteSession *session = [EvernoteSession sharedSession];
[session authenticateWithViewController:self completionHandler:^(NSError *error) {
    if (error || !session.isAuthenticated) {
        UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Error"
                                                        message:@"Could not authenticate"
                                                       delegate:nil
                                              cancelButtonTitle:@"OK"
                                              otherButtonTitles:nil];
        [alert show];

    } else {

    }
}];

}

在我看来,“authenticateWithViewController:completionHandler”方法需要在视图控制器中,以显示包含登录信息的模态视图控制器。

同样,这是一个来自API的方法,因此我无法改变它。

如何将此方法移至辅助类?起初我认为委托,但我已经在这个视图控制器的助手类的委托,以便向它发送其他错误消息,并使彼此的助手类和viewcontroller委托似乎代码 - 对我来说很难,如果它甚至可能的话。

1 个答案:

答案 0 :(得分:1)

如果Evernote API需要一个视图控制器,并且你想要完全抽象,那么在helper类中我会有一个类似于helper类的方法:

- (void)authenticateWithViewController:(UIViewController *)viewController

在此方法中,您可以封装任何共享行为,调用Evernote会话API将viewController参数传递给方法。