在NSArrayController

时间:2016-10-25 16:17:09

标签: objective-c macos cocoa core-data

我有一个测试CoreData应用程序,简单的员工类型db并设置了搜索方法。根据搜索条件,通过几个if-else语句选择NSArrayController的filterPredicate。一个例子是:

  [searchListArrayController setFilterPredicate: [NSPredicate predicateWithFormate: @"(firstname contains[cd] %@)AND(hiredate > %@)", firstName, hireDate];

这没有任何问题,但我想让用户更好一点 - 他们只是将数据输入到他们想要的字段中,应用程序将相应地调整过滤器。所以我做了以下(缩短版):

  NSMutableString *filterString = [[NSMutableString alloc] init];
  [filterString appendstring:[NSString stringWithFormat:@"(firstname contains[cd] \"%@\")", searchFirstName]];

  if (![searchDepartment isEqualToString:@""]){
     [filterString appendString: [NSString stringWithFormat:@"AND(department like[cd] \"%@\")", searchDepartment]];
  }

   [searchListArrayController setFilterPredicate: [NSPredicate predicateWithFormat: filterString];

这也有效,但问题出在这里 - >按日期过滤!

在我原来的filterPredicate中,一切都没有问题,但尝试新的方法却没有。这是我尝试过的:

  [filterString appendString: [NSString stringWithFormat:@"(hiredate >= %@)", hireDate]];

已生成:无法解析格式字符串...

  [filterString appendString: [NSString stringWithFormat:@"(hiredate >= \"%@\")", hireDate]];

生成:无法识别的选择器发送到实例...

如前所述,一切都以原始格式工作,我只是尝试新的东西,不能缝合以使日期部分工作。

任何想法都将不胜感激 - 谢谢。

- [编辑] -----

也许我正在接近这个错误,在搜索表单上所有字段都可用。用户在需要字段的地方输入信息。所有空白字段都被视为“所有内容”,因此空白名称字段将显示所有人。具有department =“sales”的空白名称字段将显示销售部门中的每个人。

如果谓词中的所有参数都不起作用,则空白名称字段的结果为零。我不想使用||,因为我需要AND,Sam + Sales + $ 50,000作为例子。

因为用户选择未知,我以为我会在调用搜索时构建字符串 - 这就是我有大字符串的原因。

在概念中,这个工作一直工作,直到我带来了约会。对于filterPredicate来说真的是新手,并没有找到太多的Apple文档 - 这就是我设置它们的方式。欢迎任何有关更好方法的建议。

0 个答案:

没有答案