如果搜索数据与包含特殊字符的其他数据类似,则从CoreDataBase搜索数据

时间:2018-01-08 09:10:20

标签: ios objective-c core-data nspredicate core-data-migration

我已在我的应用程序中实现了Core Database并从表中获取数据。 如果数据包含或不包含连字符( - )

,则应用程序要求将获取相同的数据

对于Exp1: 表包含以下数据

   Id       Serialnumber     Name
   1          ABC          ABC2015
   2          A-BC         AB-C001

表列SerialNumber包含ABC,A-BC,如果用户搜索 AB-C 总是与ABC相同,A-BC

Exp 2:

Id    Serialnumber     Name
1        AB-C         AB-C2015
2        A-BC         A-BC001

表列SerialNumber包含AB-C,A-BC,如果用户搜索 ABC ,则始终与AB-C,A-BC相同

这是我的代码

+(NSMutableArray*)fetchDataFromCoreDatabase:(NSString*)searchString {
NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init];
NSEntityDescription *entity = [NSEntityDescription entityForName:k_CoreDBEnity_SerailnumerinManagedObjectContext:managedObjectContext];
[fetchRequest setEntity:entity];
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"Serialnumber == %@",searchString];
[fetchRequest setPredicate:predicate];
NSError *error = nil;
NSArray *result = [managedObjectContext executeFetchRequest:fetchRequest error:&error];
if (error) {
    nslog(@"Unable to execute fetch request.");
    error, error.localizedDescription]];
}
return [result mutableCopy];}

那么任何想法如何实现这种方法? 提前谢谢!

1 个答案:

答案 0 :(得分:0)

如果是我,我会添加一个额外的隐藏字段,仅用于搜索,不包括连字符。然后我会在取出之前删除连字符。在您的示例中:

  • 添加名为serialNumberSearch的字段。对于您的示例数据,这将始终为“ABC”,没有-
  • 搜索时,如果我获得A-BCAB-C,请先删除-,然后搜索与serialNumberSearch字段匹配的结果。

根据您的描述,结果将包含任何匹配的内容。