2010-07-14 19 views
0

我有一個叫做updateTheValue()的函數,我現在用[self updateTheValue]調用了一段時間。最近發生了兩件事。我在viewDidLoad()方法中添加了調用該方法的方法,並且吐出了一條警告,說我的班級可能不會對此做出響應。其次,我希望像字符串一樣將對象傳遞給updateTheValue(),但主要是ints,所以我聲明瞭一個NSObject傳入方法。 int可以放入一個NSObject插槽,或者我應該使用什麼?帶有NSObject&iPhone類的iPhone Int不能引用它本身

我會已分別公佈這些,但他們似乎因爲要與更新updateTheValue()接受一個NSObject每提到這一功能,事實證明,我的課「可能不響應-updateTheValue」

回答

3

你可以讓你的方法是這樣的:

-(void)updateTheValue:(NSObject *)anObject 
// or use -(void)updateTheValue:(id)anObject 
{ 
    if ([anObject isKindOfClass:[NSString class]]) { 
     // Do your string handling here 
    } 
    else if ([anObject isKindOfClass:[NSNumber class]]) { 
     // Do your number handling here 
    } 
} 

使用方法如下:

[self updateTheValue:[NSNumber numberWithInt:42]]; 

我建議這樣做,雖然兩種不同的方法,即updateTheValueWithInt:updateTheValueWithString:使其更容易閱讀並理解。

確保您在使用方法簽名前可以看到方法簽名,以便編譯器知道它的功能。

如果您使用單獨的方法,則可以直接使用int而不將它們包裝到NSNumber對象中。

+0

我同意。在Objective-C中,使用'id'類型的參數創建方法以允許不同的類是不正常的。有兩種不同的方法比較常見。 – 2010-07-14 07:56:05

+0

謝謝! NSNumber包裝器效果很好,現在它更容易,因爲我可以將字符串發送到屏幕上的文本字段以及整數。我甚至沒有分開NSObject類型,因爲我的代碼可以處理兩者。 – SeniorShizzle 2010-07-14 08:17:57

1

第一個問題的錯誤後:

updateTheValue()必須在嘗試調用它之前聲明。

您可以調用之前移動的功能定義它,或在頂部加入了一個原型 - 例如添加:

  • (無效)updateTheValue;

靠近頂部。

問題二:

使用一個NSNumber,例如[NSNumber的numberWithInt:45];