2012-01-03 58 views
1

我XCode中得到一個錯誤具有相同名稱的多個方法:xcode的目標c - 避免(使用「的setEnabled」)

命名多個方法「的setEnabled」發現不匹配的結果,參數類型或屬性

我使用內AppDelegate.m下面的代碼:

#import "BluetoothManager.h" 
Class BluetoothManager = objc_getClass("BluetoothManager") ; 
id btCont = [BluetoothManager sharedInstance] ; 
[btCont setEnabled:!currentState] ; 
+0

爲什麼你想這樣做,這樣的方法? – Krizz 2012-01-03 18:52:06

+0

我不知道 - 我剛剛在Stack上發現了一些代碼,可以讓我做我需要做的事情。不幸的是,我不太熟練使用XCode進行編程。 – mheavers 2012-01-03 18:54:18

回答

2

如果要導入BluetoothManager.h那麼你就在編譯時解決,調整代碼說:

#import "BluetoothManager.h" 
Class BluetoothManagerClass = objc_getClass("BluetoothManager"); 
BluetoothManager *btCont = [BluetoothManagerClass sharedInstance]; 
[btCont setEnabled:!currentState]; 

你想支持一個新的類,但也運行在舊的iOS?

響應Q1:「簡單」的版本,如果你不嘗試做任何事情棘手,是放棄該條規定,是不是經常需要

#import "BluetoothManager.h" 
BluetoothManager *btCont = [BluetoothManager sharedInstance]; 
[btCont setEnabled:!currentState]; 

這種動態的靈活性objc_getClass假定:

  • BluetoothManager在「BluetoothManager.h」聲明
  • 還有一類方法中聲明(和定義)就可以了+sharedInstance(其能遵循共同的Objective-C的命名規則,我會重新命名爲+sharedBluetoothManager
  • BluetoothManager聲明瞭一個名爲-setEnabled:
+0

那麼,所有這些應用程序真的會在別人的本地手機上運行,​​所以不需要 - 它不需要支持任何舊版本的iOS - 它是允許藍牙一鍵切換的應用程序。當我切換你的代碼,我得到一個錯誤:「使用未聲明的標識符'btCont'」 - 也是「BluetoothManagerClass」應該是「BluetoothManager」 – mheavers 2012-01-03 18:56:26

+0

請參閱編輯:它可能更簡單 – bshirley 2012-01-03 21:43:43

+0

@bshirly爲什麼我會收到評論那btCont是一個未聲明的標識符? – mheavers 2012-01-04 15:26:50