添加或更改NSPredicate时的NSPredicateEditor callBack

时间:2018-03-03 17:49:47

标签: objective-c macos nspredicate nspredicateeditor

我在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);
}

任何帮助表示赞赏

2 个答案:

答案 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"); } predicatepredicate的属性。

NSRuleEditor

解决方案D:将编辑器的值绑定到谓词属性。

答案 1 :(得分:0)

“ NSPredicateEditor”具有一个“动作”选择器,该选择器可以通过代码连接,也可以通过使用界面设计器中的插座连接到函数,如下所示:

- (IBAction)predicateChanged:(id)sender {
    // Update your view
}