我正在使用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委托似乎代码 - 对我来说很难,如果它甚至可能的话。
答案 0 :(得分:1)
如果Evernote API需要一个视图控制器,并且你想要完全抽象,那么在helper类中我会有一个类似于helper类的方法:
- (void)authenticateWithViewController:(UIViewController *)viewController
在此方法中,您可以封装任何共享行为,调用Evernote会话API将viewController
参数传递给方法。