2012-07-13 110 views
0

我有兩個視圖控制器和筆尖。我填充一個視圖控制器與撥動開關,並在其頭文件中聲明的:使用訪問權限問題

@public UISwitch *toggleSwitch; 

,並暴露其作爲像這樣的屬性:

@property (nonatomic,retain) IBOutlet UISwitch *toggleSwitch; 

我還與toggleSwitch出口連接的交換機。現在我想在我的其他視圖控制器中使用這個toggleSwitch字段,我該怎麼做?在外地宣言中是不是使用@public夠了?請幫忙。謝謝。

回答

0

沒問題。只要使用這樣的開關:

vcWhereYouDeclaredTheSwitch.toggleSwitch.on = YES; 

BOOL test = [vcWhereYouDeclaredTheSwitch.toggleSwitch isOn]; 

您的其他視圖控制器內。

以下是有關propertys一些一般性的想法:

  • 內存管理:幕後它將創建它創建與正確內存管理變量二傳手。它會爲您節省一些麻煩,因爲您可以很容易地看到內存管理如何完成(strong/weakretain/copy/assign)。

  • 輔助功能從其他類:如果你宣佈你在.H @property@synthesize它在你的Ivar將公共讀取和寫入的.M。您可以使用privat類擴展來防止這種情況。你甚至可以聲明一個@property public readonly並通過privat類擴展在內部聲明readwrite。 例如:私人財產

// [In the implementation file] 
    @interface MyClass() 
    @property (nonatomic, retain) NSMutableArray* someData; // private!! 
    @end 

    @implementation MyClass @synthesize someData 
    @end 
  • 自定義getter和setter:如果你喜歡,你還可以編寫自定義的getter和setter,你甚至可以只寫一個getter和setter和讓其他人自動@synthesize。您可以將自定義邏輯寫入這樣一個吸氣和定位器,例如您可以在@property更改後重新加載表格視圖。

  • 自動鍵值觀察(KVO)兼容:如果您使用或計劃使用KVO,只需聲明該屬性即可免費獲取。沒有其他事情需要去做!

  • 如果你需要你的Ivar是公衆更爲簡單寫一個@property比寫一個getter和setter的伊娃

  • 隨着@property你不需要在伊娃(宣佈在iOS和64位Mac Os X應用程序)。您可以通過@synthesize做到這一點:

@synthesize myiVar = _myIvar; 
+0

的感謝!它工作正常,但我檢查了它是否在toggleSwitch的聲明中沒有'@ public'的情況下仍然可以正常工作。爲什麼?這是否僅僅是因爲我在其他vc中導入該vc,因此無關緊要?還有一點,雖然默認情況下開關工作正常,但是當我關閉開關時,它在main.m文件中拋出一個異常:「線程1:信號SIGABRT」。在使用Xcode的時候,我經常遇到這個錯誤,這個錯誤在我的屁股中是一個真正的痛苦。請幫忙。 – 2012-07-13 07:10:37

+0

添加了關於iVas和propertys的一些信息 - 關於您的其他錯誤:如果您提出新問題,可能會更有用,因此每個人都可以幫助您和/或稍後使用這些信息。 – Pfitz 2012-07-13 07:17:46

0

你使UISwitch的財產。所以,你可以使用viewcontroller對象在任何地方使用它。

假設你想使用它在您目前的看法,然後用它

self.toggleSwitch

//或

viewControllerObject.toggleSwitch

+0

我明白了。謝謝。另一個快速問題 - >雖然默認情況下一切正常,開關默認爲ON,但是當我關閉開關時,它在main.m文件中拋出一個異常:「線程1:信號SIGABRT」。在使用Xcode的時候,我經常遇到這個錯誤,這個錯誤在我的屁股中是一個真正的痛苦。請幫助 – 2012-07-13 07:16:20

+0

您必須通過一些錯誤的參數。你能分享一下你正在使用它的代碼嗎? – 2012-07-13 07:55:36