2012-07-19 77 views
1

我無法理解segues以及它們如何工作和傳遞對象。基本上我有一個計算器,並試圖繪製存儲在數組中的對象。到目前爲止,我有一個名爲Brain的對象,它是CalculatorBrain的一個實例。現在大腦有一個NSArray屬性,我用它作爲堆棧來存儲變量。假設我將數值3和5添加到數組中,然後想要繼續。我選擇了一個名爲「Graph」的按鈕,所以當我點擊按鈕後,它會繼續。我將如何將大腦傳遞給我正在繼續使用的新視圖控制器?我有一個名爲setGraphingPoint的屬性,它在新的視圖控制器中定義,我認爲它應該接受傳遞的對象。另外,如果我通過segue傳遞大腦,值3和5會與它一起傳遞,還是會創建CalculatorBrain的新對象?這是我到目前爲止。使用Segue傳遞對象

這是在新的視圖控制器

@property (nonatomic, strong) CalculatorBrain *graphingPoint; 
@synthesize graphingPoint = _graphingPoint; 

-(void) setGraphingPoint:(CalculatorBrain*) graphingPoint{ 

_graphingPoint = graphingPoint; 
[self.graphingView setNeedsDisplay]; 

} 

這是從中將有老視圖控制器稱爲定義按鈕Segue公司

-(void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender{ 

if([segue.identifier isEqualToString:@"Graph"]) 
    [segue.destinationViewController setGraphingPoint:[self.brain program]]; 
+0

什麼錯?你能更具體地說明什麼不起作用嗎? – Nosrettap 2012-07-19 21:18:50

+0

我只是不完全明白如何傳遞和傳遞對象,傳遞的是什麼 – 2012-07-19 21:22:21

+1

在這個例子中,你傳遞了一個指向對象'property'的指針。這意味着它是對原始對象的引用而不是副本。想象一下,如果我用我的手指指着一隻狗。突然你走到我旁邊。然後我可以告訴你也用你的手指指向狗。我們都指的是EXACT相同的對象(但請注意,狗實際上並沒有移動) – Nosrettap 2012-07-19 21:27:44

回答

2

可以使用的協議。例如,你可以有你prepareForSegue是這樣的:

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender 
{ 
    id destination = segue.destinationViewController; 
    if([destination conformsToProtocol:@protocol(GraphPointUsing)]) 
     [destination setGraphingPoint:[self.brain program]]; 
} 

然後你只需要確保您segueing到循規蹈矩到GraphPointUsing的視圖控制器。

如果你不想使用協議,但你還是要呼籲GraphPoint方法,你可以這樣做:

//In new ViewController suppose we want to call the method `foo` on `GraphPoint` 
[self.graphingPoint foo]; 

//Or if we want to call a setter we can do 
[self.graphingPoint setFoo:5]; 
+0

我很可能會需要使用協議,感謝您的幫助,讓我對它更加清楚 – 2012-07-19 23:16:12

+0

如果有幫助,然後單擊向上箭頭和此答案左側的大號複選標記:) – Nosrettap 2012-07-19 23:22:48