我的應用程序目前有我很確定是一個糟糕的設計,但我不知道如何組織它更好。例如:LoginViewController將用戶名和密碼的輸入文本發送給UserController的實例。 UserController通過NetworkRequestController向我的服務器發送一個請求來驗證用戶名和密碼,NetworkRequestController負責處理所有客戶端 - 服務器通信。 NetworkRequestController解析服務器的JSON響應並將其發送回UserController上的指定選擇器,然後在通知結果視圖之前完成所有業務。代表團和選擇器
目前,在LoginViewController的viewDidLoad方法中,UserController實例化爲LoginViewController的本地屬性 - 雖然我覺得我更喜歡它是單例類。問題是我需要在UserController上設置另一個對象(如LoginViewController)作爲委託,以便通過適當的選擇器將登錄結果返回到視圖。
//LoginViewController sends request to local UserController instance
[userController validateLoginWithDelegate:self
withResult:@selector(loginResult:)
forEmail:email.text
forPassword:password.text];
//UserController asks NetworkRequestController to send login to server
- (void)validateLoginWithDelegate:(id)delegateObj
withResult:(SEL)onResult
forEmail:(NSString *)email
forPassword:(NSString *)password {
if(delegateObj != nil && onResult != nil){
self.delegate = delegateObj;
self.resultSelector = onResult;
}
NSString *url = [NSString stringWithFormat:@"/UserService.cfc?method=Authenticate&email=%@&password=%@&returnFormat=JSON", email, password];
[[NetworkRequestController sharedNetworkRequestController]
requestJSONWithURLString:url
andDelegate:self
onFinished:@selector(onLoginResult:)
onFailed:nil
onOffline:nil
progressView:nil
timeout:30];
}
//NetworkRequestController sends the request to the server and sends the parsed JSON back to UserController
[delegate performSelector:onFinished withObject:parsedJSON];
//UserController does it's business and sends the result to the view
if(delegate != nil && resultSelector != nil){
[delegate performSelector:resultSelector withObject:result];
}
我只一直在與對象 - 和可可幾個月,我敢肯定這是幾乎算好,但我更一定有我丟失的東西。這可以通過協議來實現嗎?建議嗎?
請記住,可以多次調用viewDidLoad(即視圖可以在內存警告中卸載並在需要時重新加載視圖)。在init中初始化事物更安全; viewDidLoad旨在允許您在從nib加載視圖層次結構後修改視圖層次結構,而不是加載其他視圖控制器。 – 2010-06-29 12:49:09