2013-02-03 68 views
0

我有一個UITableView,當單元格被點擊時模態地呈現一個UIViewController。 UIViewController從與被輕敲的單元格相對應的模型對象接收數據,並顯示一個界面來編輯這些數據。當用戶完成編輯時,按鈕點擊會關閉UIViewController,並將編輯寫入模型對象。在UITableView和UIViewController之間共享數據模型?

請問下面的代碼是否存在任何內存或設計問題?

在提出的UITableView子類實現,作爲委託提出的UIViewController:

- (void) prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender { 
    UINavigationController *navigationController = segue.destinationViewController; 
    navigationController.delegate = this; 
    navigationController.dataModel = someDataModel; 
} 

// delegate callback 
- (void) onViewControllerDone: (UIViewController *)controller { 
    [self.tableView reloadData]; 
} 

中提出的UIViewController子類實現:

- (IBAction) done: (id)sender { 
    // directly modify dataModel passed into UIViewController with data from UI 
    [self.dataModel.someProperty setString: self.textView.text]; 

    [self.delegate onViewControllerDone:self]; 
} 

東西聞起來好笑關於通過數據模型到視圖,並讓視圖進行更改。我是Objective-C/iOS開發新手,不確定是否有更好的/首選的方法來做到這一點?

回答

0

在我看來,你在做什麼沒有任何缺陷,雖然可能有一個更優雅的方法來解決你的問題。一種選擇是通過委託將信息傳遞迴原來的控制器,例如,一旦完成編輯某個字段,委託會立即得到通知,並對數據模型進行必要的更改。這樣,來回傳遞的模型參考就沒有了,而且實際上確保只有一個控制器負責編輯它的內容。例如:

- (void)doneEditing { 
    if ([_delegate respondsToSelector:@selector(fieldChanged:)]) { 
     [_delegate fieldChanged:self.newFieldValue]; 
    } 
}