2013-05-29 29 views
0

隨着時間的推移與Obj-C握手,這很好!對象可以在另一個視圖控制器中看到嗎?

所以,我會用我的例子,我試圖從中學習。我正在使用選項卡式視圖控制器。我在頁面上一個UIButton這帶來了這樣一個新的觀點:

FilterViewController *ctrl = [[FilterViewController alloc] init]; 

[UIView transitionFromView:self.view toView:ctrl.view duration:1 options:UIViewAnimationOptionTransitionCurlUp completion:nil]; 

self.filterViewController = ctrl; 

[self.navigationController pushViewController:self.filterViewController animated:NO]; 

現在,讓我們說我創建了一個名爲TimeFilter類和我初始化它在FirstViewController

TimeFilter *timeFilter = [[TimeFilter alloc] init]; 
[timeFilter saveTime:1300]; 

在FilterViewController能我只是這樣做:

int timeSelected; 
timeSelected = [timeFilter getTime]; 

我想弄清楚對象在命令行工具,而不是對象的工作方式。

非常感謝!

回答

1

FilterViewController只要定義一個屬性:

@property (nonatomic, strong) timeFilter; 

然後,你可以提出它之前在您的視圖控制器分配timeFilterFilterViewController

TimeFilter *myTimeFilter = [[TimeFilter alloc] init]; 
[myTimeFilter saveTime:1300]; 
FilterViewController *ctrl = [[FilterViewController alloc] init]; 
ctrl.timeFilter = myTimeFilter; 

內。然後FilterViewController你可以這樣做:

int timeSelected = [self.timeFilter getTime]; 

並且不要使用transitionFromView:toView:duration:options:completion:來顯示您的新視圖控制器。達到你想要什麼正確的方法是:

ctrl.modalTransitionStyle = UIModalTransitionStylePartialCurl; 
[self presentViewController:ctrl animated:YES completion:nil]; 
+0

的任何地方嘿,對不起!這已經讓我失望了。所以,getTime仍然是在類TimeFilter中定義的,比如'int theTime; - (int)getTime {return theTime; }' –

+0

@JoshBoothe yes'getTime'在TimeFilter中定義。你不必改變那個班級。屬性就像自動獲取/設置方法和內存管理的指針。你基本上是告訴FilterViewController類使用哪個TimeFilter實例。 –

+0

我想我正在接近一點。所以我創建了TimeFilter類,在FirstViewController.h文件中創建了一個屬性,我爲'FilterViewController'導入了'.h和.m中的TimeFilter.h文件,所以我現在假設我必須導入TimeFilter .h在我的FilterViewController(在屏幕上彈出的視圖),然後做'[timeFilter setTime:1];並且在FirstViewController中它可以通過'timeFilter.getTime'訪問是否正確?感謝您的支持 –

2

是ü可以做這樣的事情和我只好方式:

1)可以使那些方法-class方法,那麼,你也會不需要創建對象。

+(id)getTime 

,並從任何地方調用它

[TimeFilter getTime]; 

2)可以使TimeFilter單身

+(TimeFilter*)shared 
{ 
    static TimeFilter *kTimeFilter = nil; 
    static dispatch_once_t onceToken; 
    dispatch_once(&onceToken, ^{ 
    kTimeFilter = [TimeFilter new]; 
}); 
    return kTimeFilter; 
} 

,並在代碼中調用

[[TimeFilter shared] getTime]; 
+0

嘿,謝謝!在我的書(Objective-C編程第5版)中我沒有單身,所以我會嘗試第一個!所以只要該類包含在文件的頂部,就可以在所有視圖中通過類方法訪問它是否正確?那麼,改變視圖數據在類/對象內保持不變? –

+0

標記答案如果有幫助,則接受。 1)是的2)不明白你的意思 – alex

+0

如果你創建一個單例,你需要通過dispatch_once使線程安全 – d00dle

相關問題