2014-03-02 13 views
0

我已經在iOS上進行了幾個月的編程,我想我還沒有完全理解Objective-C的所有概念。因此,每次我必須在Objective-C類和項目之間複製代碼時,我都會發抖,只是因爲我目前不瞭解更多。如何在iOS/Objective C中執行DRY代碼?

僅有2個例子:

  1. 對於一些我的UITextField的我需要表現出pickerview代替標準鍵盤。所以我讓自己做了一個函數makePicker,它使用按鈕等初始化pickerview。如果我在另一個類中有另一個文本字段,我需要複製該函數,因爲我無法找到一種方法來共享這些類中的函數一個乾淨的方式。對於這個問題,乾淨的方法是什麼?

  2. 很多我的類需要讀取&將JSON寫入http url,這意味着我必須對數據進行解碼和編碼以及實現NSURLConnectionDelegate的所有內容。我會非常樂意爲我處理所有這些回調的組件,而不是讓它們遍佈整個地方。

非常感謝您的意見!

回答

1
  1. 使自己的UITextField子類,定製初始化

  2. AFNetworking或 - 如果你喜歡冒險 - RestKit

1
  1. 創建一個類。如果你不需要ivars製作方法類的方法。如果你確實把它作爲子類,在這種情況下是UITextField的子類。

  2. 委託人的觀點是它可以是一個不同的類。爲委託創建委託類和可能的子類。

+0

@ 2。所以我會有類似HTTPJSON對象的東西,用一些公共方法來實現委託方法的讀寫。 – Tyron

1

1 /我覺得你的要求不僅僅是POO iOS或Objective-C的...如果你需要比原來擁有更多功能的物體,只需創建從原來的繼承一個新類,添加你的功能。現在使用這個新類,你可以訪問該函數。當然,如果您不需要將自己的數據保存在對象中,那麼使用Objective-c也可以選擇類別。

PickerTextField.h

@interface PickerTextField : UITextField 
@end 

PickerTextField.m

@implementation PickerTextField 

- (BOOL)becomeFirstResponder { 
    self.inputView = YOUR-PICKER; //YOUR-PICKER have to be create first !!! 
    return [super becomeFirstResponder]; 
} 

- (BOOL)resignFirstResponder { 
    self.inputView = nil; 
    return [super resignFirstResponder]; 
} 

@end 

2 /可能是你需要實現的單身協議對於這一點,不是嗎?

+0

* SIGNLETON協議*會是什麼? –

+0

Oups SINGLETON更好;-D謝謝。你的解決方案(AFNetworking)看起來更好,但我還沒有看到你在我面前回答過。 –

+1

錯別字,你是什麼意思的單身協議? –

0

關於第二個問題,你可以利用SBJson框架,它可以從以下網址下載的:

https://github.com/stig/json-framework/downloads

希望它可以幫助你;)

+0

「什麼是JSON」是什麼意思?這是一個對象符號:http://en.wikipedia.org/wiki/JSON –

+0

或者只是使用Apple提供的類:'NSJSONSerialization'。 – zaph

0

Q1。

WAY1:有兩個屬性inputView和的UITextField inputAccessoryView,所以創建自己的類InputView,像DatePickerInputView的,與文本框結合,改變當選擇器選擇一個日期的TextField.text。方式2:製作自己的UITextField的子類,在其中編寫代碼。 Way3:Wirte一個Utils靜態方法,以textField爲參數,這樣你就可以共享你的代碼。

Q2。

有很多網絡庫做你想問的東西,如AFNetworkingASIHTTPRequest,如果你想弄清楚它是如何發生的,請查看源代碼。

+0

ASIHTTPRequest不再開發,不要將其用於新項目。從網站:「請注意,我不再在這個圖書館工作 - 你可能想考慮使用別的東西來做新的項目。:)」最後更新:2011年5月15日(v1.8.1) – zaph