首先,从您的代码中调用 viewWillAppear 等可能不是一个好主意,因为这些行为将来可能会发生变化。(例如,在早期的 iOS 版本中,viewDidLoad 曾经被多次调用,现在每个实例调用一次)。您可以将代码移动到单独的方法中。
其次,您可能希望将 NSNotification 视为传达更改的一种方式。这很容易,并且不需要您保留任何委托指针。
例如,您可以添加到子视图控制器 .h:
#define MASTER_UPDATED @"MasterUpdated"
#define DETAIL_UPDATED @"DetailUpdated"
然后在主控制器中类似:
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(updateFromDetail:) name:DETAIL_UPDATED object:nil];
...
-(void)updateFromDetail:(NSNotification *)no
{
NSDictionary *nd = [no userInfo]; // get relevant information
// take action....
}
从细节方面来看,当一个项目被点击时,你会发送如下消息:
NSDictionary *userInfo = @{@"somekey":@"somevalue", @"anotherkey":@"anothervalue"};
[[NSNotificationCenter defaultCenter] postNotificationName:DETAIL_UPDATED
object:self userInfo:userInfo];