我正在使用 SplitViewController。在 MasterViewController 的 viewDidLoad 中:
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(reloadMasterTable:) name:ReloadMasterTableNotification object:_detailViewController];
在 DetailViewController 中,我有两个文本字段。在 didEndEditing 上:
- (void)textFieldDidEndEditing:(UITextField *)textField {
if ([_detailItem isKindOfClass:[Pill class]]) {
Pill *p = (Pill *)_detailItem;
if (textField.tag == TEXTFIELD_NAME_TAG) {
p.name = textField.text;
}
if (textField.tag == TEXTFIELD_NOTE_TAG) {
p.note = textField.text;
}
[self updateMasterTableView];
}
}
- (void)updateMasterTableView {
if ([_detailItem isKindOfClass:[Pill class]]) {
Pill *currentPill = (Pill *)_detailItem;
NSUInteger indexToReplace = [[[DataManager sharedInstance] pillArray] indexOfObject:currentPill];
[[[DataManager sharedInstance] pillArray] replaceObjectAtIndex:indexToReplace withObject:currentPill];
NSLog(@"i should update row: %i", indexToReplace);
NSIndexPath *path = [NSIndexPath indexPathForRow:indexToReplace inSection:0];
NSDictionary *dict = [[NSDictionary alloc] initWithObjectsAndKeys:path, @"IndexPath", nil];
[[NSNotificationCenter defaultCenter] postNotificationName:ReloadMasterTableNotification object:self userInfo:dict];
}
}
从 NSLog 来看,当 text field 委托方法被调用时,它只被调用一次,然后 updateMasterTableView 被调用一次。当我通过调试器运行它时,在 reloadMasterTableView: 方法上放置一个断点,它会通过该方法两次。这是为什么?谢谢。
或者,如果有更好的方法可以在两个视图之间进行同步,我会全力以赴。