1

我在我的應用程序中使用故事板,並且在prepareForSegue方法中將SourceViewController中的屬性傳遞給DestinationViewController時,傳遞的屬性通過引用傳遞,而不是通過值傳遞。這對我來說會造成一些麻煩,就像在Destination View Controller中一樣,如果用戶擺弄了數值,然後在我的SourceViewController中得到一個我不想要的更新值。prepareForSegue通過引用傳遞值到目的地視圖控制器

請看下面讓在這個問題上

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender{if([[segue identifier] isEqualToString:@"DestinationView"]) 
    { 
     DestinationViewController *destinationViewController = [segue destinationViewController]; 
     [destinationViewController setActivity:activity]; 
     //Here the value of activity is passed by reference. I have verified the same by checking the address of activity variable in Variable pane of Xcode in Source and destination view controller 
} 

更多信息,現在我不知道如何只傳遞值,而不是在上述情況下的參考。

+0

AFAIK目標C只使用傳遞的價值實現其委託copywithZone。在你的情況下,它傳遞活動的指針地址。沒有? – Alex 2013-05-08 23:15:24

+0

@Alex是的,它的確在傳遞活動的指針地址 – sandy 2013-05-10 10:39:32

+0

,您仍然可以創建一個副本,正如Lithu所解釋的,但我不確定這真的是個好主意,因爲它可能會耗盡大量內存。在這一點上,除了只允許字段只讀 - 例如禁用用戶交互 - 使用一個靜態布爾標誌,你在傳遞之前傳遞給你的類。您還可以實施狀態機(谷歌FSM庫),並在保存字段內容之前檢查狀態。這將消除通過每個領域的麻煩,並選擇性地禁用每個.... – Alex 2013-05-10 13:45:33

回答

2

嘗試使用它

[destinationViewController setActivity:[activity copy]]; 

副本如有需要

- (id)copyWithZone:(NSZone *)zone 
相關問題