我有一个测试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文档 - 这就是我设置它们的方式。欢迎任何有关更好方法的建议。