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參數傳遞給該方法。