gpt4 book ai didi

iphone - postNotification 的观察者被多次调用

转载 作者:行者123 更新时间:2023-12-03 19:24:46 25 4
gpt4 key购买 nike

我正在使用 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 来看,当调用文本字段委托(delegate)方法时,它只被调用一次,然后 updateMasterTableView 被调用一次。当我通过调试器运行它时,在 reloadMasterTableView: 方法上放置一个断点,它会执行该方法两次。这是为什么?谢谢。

或者如果有更好的方法在两个 View 之间同步,我洗耳恭听。

最佳答案

我认为实现这一点的更好方法是实现委托(delegate)模式。

在您的详细 Controller .h中定义一个协议(protocol)

@protocol PillDetailViewControllerDelegate <NSObject>

- (void)PillDetailViewController:(PillDetailViewController *)vc didUpdatePillAtIndexPath:(NSIndexPath)indexpath;

@end

并添加委托(delegate)属性

@property (nonatomic, assign) id<PillDetailViewControllerDelegate>delegate;

在您的详细 Controller .m中,

@synthesize delegate;

不要在 updateMasterTableView 中发布通知,而是:

[self.delegate PillDetailViewController:self didUpdatePillAtIndexPath:path];

最后在 MasterView Controller 中,设置委托(delegate)并响应回调

希望这有帮助

关于iphone - postNotification 的观察者被多次调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10611234/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com