向现有 NSPredicate 添加附加参数

发布于 2024-10-08 01:41:59 字数 687 浏览 3 评论 0 原文

是否可以采用现有的 NSPredicate 并向其添加附加参数?

在我的一个表视图中,我传入一个 NSPredicate 以用于我的 NSFetchedResultsController,如下所示:

[fetchedResults setPredicate:self.predicate];

这工作得很好,并将根据现有的 NSPredicate 显示内容。但我想更进一步,向 tableView 添加 UISegmentedControl。

- (IBAction)segmentChange:(id)sender {
     switch (selectedSegment) {
            case kDisplayDVD:
                // Add argument to existing NSPredicate
                break;
            case kDisplayVHS:
                // Add argument to existing NSPredicate
                break;
            default:
                break;
        }

根据用户选择的段,我想向现有 NSPredicate 添加一个参数。这有可能吗?

Is it possible to take an existing NSPredicate and add an additional argument to it?

In one of my tableviews I am passing in a NSPredicate to use in for my NSFetchedResultsController like so:

[fetchedResults setPredicate:self.predicate];

This is working just fine and will show the content based on the existing NSPredicate. But I want to take this one step further by adding an UISegmentedControl to the tableView.

- (IBAction)segmentChange:(id)sender {
     switch (selectedSegment) {
            case kDisplayDVD:
                // Add argument to existing NSPredicate
                break;
            case kDisplayVHS:
                // Add argument to existing NSPredicate
                break;
            default:
                break;
        }

Based on which segment the user has chosen I would like to add an argument to the existing NSPredicate. Is this at all possible?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

云仙小弟 2024-10-15 01:41:59

当然!

假设您的对象有一个名为 display 的属性,它是一个 int(或者更确切地说,是一个与您的 kDisplayDVDkDisplayVHS 等对应的枚举) 。那么你可以这样做:

- (IBAction) segmentChange:(id)sender {
  NSPredicate * newCondition = [NSPredicate predicateWithFormat:@"display = %d", selectedSegment];
  NSPredicate * newPredicate = [NSCompoundPredicate andPredicateWithSubpredicates:[NSArray arrayWithObjects:[self predicate], newCondition, nil]];
  [self setPredicate:newPredicate];
}

所以如果[self predicate](foo = @"bar" OR baz > 42),你的新谓词将是display = 1 AND (foo = @"bar" OR baz > 42)

Sure!

Let's say that your objects have a property called display that's an int (or rather, an enum that corresponds to your kDisplayDVD, kDisplayVHS, etc). Then you can do:

- (IBAction) segmentChange:(id)sender {
  NSPredicate * newCondition = [NSPredicate predicateWithFormat:@"display = %d", selectedSegment];
  NSPredicate * newPredicate = [NSCompoundPredicate andPredicateWithSubpredicates:[NSArray arrayWithObjects:[self predicate], newCondition, nil]];
  [self setPredicate:newPredicate];
}

So if [self predicate] is (foo = @"bar" OR baz > 42), your new predicate will be display = 1 AND (foo = @"bar" OR baz > 42)

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文