2011-03-06 17 views
1

因此,新的Objective-C和iphone/ipad開發。試着讓我的腳溼一個簡單的應用程序連接到我們的apis之一。Objective-C(iphone開發)中的代表最佳實踐

現在我有一個用戶名和密碼輸入和按鈕提交視圖。當它被點擊時,我抓住這些並嘗試通過一個簡單的通話對我們的服務器進行身份驗證。我有使用NSURL的東西的工作。我原本是通過在我的視圖控制器中聲明NSURLConnection的委託方法來工作的。一旦我確認它正在正常工作,我知道我需要從那裏得到那些東西。

所以我創建了一個新的類ApiLogin其中有一個方法:

(void)authenticateWithUser:(NSString *)username andPassword:(NSString *)password 

它執行後,然後這個對象的委託方法聲明,並處理所有的東西。我遇到的下一個問題是如何讓任何信息返回到視圖控制器。由於這些是異步調用,我不能讓我的方法返回數據。所以經過一番挖掘,我嘗試了一個似乎有意義的解決方案。我爲我新創建的類創建了一個自定義代理

(void)loginDidFinish:(NSString *)login 

我的視圖控制器聲明和使用的是哪一個。這工作完美。

所以,我現在的問題是...我是否會去兔子洞或這是很好的?我不想創建一套類或具有子類的類來處理服務器通信和數據處理,如果這是糟糕的形式,則可以使用這些委託函數來處理這些函數。基本上我在問,我是這樣做的嗎?有沒有更好的辦法?我覺得我已經得到了一個新的工具,我發現每一個問題都有機會使用這個工具來解決它,而不想犯這個錯誤。由於我對iphone/ipad開發真的很陌生,並且從我完成任何嚴肅的C編碼開始已經很長時間了,我感覺有些東西丟失了。

回答

0

你會發現這個鏈接有用的,因爲它似乎是在談論類似的情況,你在這裏筆者使用了代理:

http://css.dzone.com/articles/do-not-publishcreating-your

此外,這款蘋果頁面可能是一個很好的閱讀,以及如果您想了解不同的方式對象可以互相通信:

http://developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/CocoaFundamentals/CommunicatingWithObjects/CommunicateWithObjects.html

最好的辦法確信你使用的是正確的策略,貝伊並且僅僅詢問其他人的確認,是爲了確保你理解授權背後的定義和目的,然後從這個角度分析你的代碼,看看它是否適合你正在嘗試做的事情。從維基百科摘錄:

在軟件工程中, 委託模式是一種設計模式 在面向對象的程序設計,其中 的對象,而不是執行一個 其既定任務,代表們 任務相關的幫手對象。 (http://en.wikipedia.org/wiki/Delegation_pattern

考慮所有這些,我認爲你是在正確的軌道與您目前正在做的事情上。

+0

感謝您的鏈接。肯定會讓我走上正確的道路。 – 2011-03-08 18:35:02

1

對我來說這似乎很好。想到的其他解決方案是讓您的視圖控制器使用鍵值觀察來觀察模型對象並進行相應更新,或者在登錄完成時使用NSNotification

1

您的視圖控制器成爲它控制的物品的代表是完全合理的。如果你需要在幾個視圖控制器中使用相同的方法,那麼我只會把它分解出來,並把它變成自己的類,而委託方法非常複雜。

+0

那麼我的問題是,如果我需要進行各種調用服務器如何讓代表正確處理不同的調用。看起來更好地將其分解成它自己的對象來處理所有的服務器的東西。 – 2011-03-06 05:01:39

+0

當然,這都是關於複雜性管理。 – 2011-03-06 05:10:39