我在XCode 9.3,objective-c,OSX而不是iOS。
我在我的应用程序中使用NSPredicateEditor,到目前为止工作正常。但是我有一个视图,它将使用编辑器中设置的谓词更新其内容(基本上视图显示已过滤的数组)。
目前我有一个“刷新”按钮,用户在编辑器中更改内容后需要点击以更新视图。
我想知道当谓词路径添加或更改时,是否有办法触发我的方法自动更新视图?
我尝试将观察者添加到NSPredicateEditor.objectValue - 但我没有收到通知。
- (void)viewWillAppear {
[self.predicateEditor.objectValue addObserver:self selector:@selector(predicateChangedByUser:) name:@"Test" object:nil];
}
- (void)predicateChangedByUser:(NSNotification*)aNotification {
NSLog(@"Changed: %@",aNotification);
}
任何帮助表示赞赏
答案 0 :(得分:0)
您没有收到通知,因为您尝试合并通知和KVO。一些解决方案:
解决方案A:将谓词编辑器的操作连接到操作方法。
解决方案B:观察通知pythonw test-gui.py
。
NSRuleEditorRowsDidChangeNotification
解决方案C:观察谓词编辑器的keypath [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(predicateChangedByUser:) name:NSRuleEditorRowsDidChangeNotification object:self.predicateEditor];
- (void)predicateChangedByUser:(NSNotification *)notification {
NSLog(@"predicateChangedByUser");
}
。 predicate
是predicate
的属性。
NSRuleEditor
解决方案D:将编辑器的值绑定到谓词属性。
答案 1 :(得分:0)
“ NSPredicateEditor”具有一个“动作”选择器,该选择器可以通过代码连接,也可以通过使用界面设计器中的插座连接到函数,如下所示:
- (IBAction)predicateChanged:(id)sender {
// Update your view
}