SplitViewController を使用しています。MasterViewController の viewDidLoad で:
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(reloadMasterTable:) name:ReloadMasterTableNotification object:_detailViewController];
DetailViewController には、2 つのテキスト フィールドがあります。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 から、テキスト フィールド デリゲート メソッドが呼び出されると、1 回だけ呼び出され、その後 updateMasterTableView が 1 回呼び出されます。reloadMasterTableView: メソッドにブレーク ポイントを設定してデバッガで実行すると、メソッドが 2 回実行されます。何故ですか?ありがとう。
または、2 つのビューを同期させるためのより良い方法があれば、私は完全に耳を傾けます。