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
}
更多信息,現在我不知道如何只傳遞值,而不是在上述情況下的參考。
AFAIK目標C只使用傳遞的價值實現其委託copywithZone。在你的情況下,它傳遞活動的指針地址。沒有? – Alex 2013-05-08 23:15:24
@Alex是的,它的確在傳遞活動的指針地址 – sandy 2013-05-10 10:39:32
,您仍然可以創建一個副本,正如Lithu所解釋的,但我不確定這真的是個好主意,因爲它可能會耗盡大量內存。在這一點上,除了只允許字段只讀 - 例如禁用用戶交互 - 使用一個靜態布爾標誌,你在傳遞之前傳遞給你的類。您還可以實施狀態機(谷歌FSM庫),並在保存字段內容之前檢查狀態。這將消除通過每個領域的麻煩,並選擇性地禁用每個.... – Alex 2013-05-10 13:45:33