0

我使用的是印象笔记API,并且我已经创建了一个辅助类,它将包含印象笔记API特定的方法,以尽可能地保持代码的抽象。我该如何将这种依赖viewcontroller的方法移到辅助类中?

但有一种方法需要从视图控制器中调用以显示登录表单,以及发生错误时的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的方法,所以我不能改变它。

如何将此方法移至辅助类?起初我以为是委派,但是我已经让这个视图控制器成为助手类的代表为了给它发送其他错误信息,并且使得对方的helper类和viewcontroller委托对我来说似乎是臭虫,如果甚至可能的话。

回答

1

如果Evernote的API需要一个视图控制器,并且要完全抽象了,我会喜欢这个像这样的辅助类的辅助类的方法:

- (void)authenticateWithViewController:(UIViewController *)viewController 

在这种方法中,你可以封装任何共享行为,通过调用Evernote会话API将viewController参数传递给该方法。