2013-08-29 71 views
0

我正在製作一個程序,它要求所有類都可以訪問一個View Controller中的屬性。我將如何創建一個全球性的財產?Global Property- objective c

+0

除非將其放在應用程序委託中,否則不能擁有全局屬性,而不應該這樣做。看看這個問題,答案會顯示如何做一個靜態幫手。 http://stackoverflow.com/questions/8647331/global-property-in-objective-c – BooRanger

+0

有人會告訴我爲什麼繼續投票我的帖子?當我不知道要改變什麼時,它變得非常煩人。 – DonyorM

+0

因爲你沒有先搜索,這個問題已經被回答過了。 – BooRanger

回答

1

幾個選項:

  1. 理想情況下,你應該避免使其成爲一個全球性的,而是從一個視圖控制器通過性能。有關示例,請參閱此excellent answer(例如將其設置爲prepareForSegue)。

  2. 或者,您可以創建一個單身人士,並使您的單身人士的財產。例如,Model.h:

    // Model.h 
    
    #import <Foundation/Foundation.h> 
    
    @interface Model : NSObject 
    
    @property (nonatomic, copy) NSString *myString; 
    
    + (instancetype)sharedModel; 
    
    @end 
    

    和Model.m

    // Model.m 
    
    #import "Model.h" 
    
    @implementation Model 
    
    + (instancetype)sharedModel 
    { 
        static id sharedMyModel = nil; 
        static dispatch_once_t onceToken; 
        dispatch_once(&onceToken, ^{ 
         sharedMyModel = [[self alloc] init]; 
        }); 
        return sharedMyModel; 
    } 
    
    @end 
    

    ,然後你的各種控制器可以使用這個單獨的類,並說明財產需要從其他類,如訪問:

    #import "SomeViewController.h" 
    #import "Model.h" 
    
    @implementation SomeViewController 
    
    - (void)viewDidLoad 
    { 
        [super viewDidLoad]; 
    
        Model *model = [Model sharedModel]; 
    
        model.myString = @"abc"; 
    } 
    
    @end 
    

    #import "AnotherViewController.h" 
    #import "Model.h" 
    
    @implementation AnotherViewController 
    
    - (void)viewDidLoad 
    { 
        [super viewDidLoad]; 
    
        NSString *string = [[Model sharedModel] myString]; 
    
        // Do whatever you want with the string 
    } 
    
    @end 
    
  3. 你的應用程序實際上已經有一個單身人士,應用程序委託,你可以添加一個屬性,並使用它。例如,如果你的應用程序委託的.H定義的屬性,someOtherString,然後你可以參考它像這樣:

    AppDelegate *appDelegate = [[UIApplication sharedApplication] delegate]; 
    appDelegate.someOtherString = @"xyz"; 
    

    如果我要使用一個單獨的模型數據,我更喜歡我的創作自己的,但這是一些人使用的另一種方法。

+0

感謝您的幫助,我現在看到我可能只是使用全局變量,這更容易。不管怎麼說,還是要謝謝你。 – DonyorM