NSPredicate核心数据

sja*_*ish 3 iphone core-data nspredicate ipad

核心数据之间LIKE [c]%@= [c]%@核心数据之间的确切差异是什么NSPredicate?我想搜索一个与接收器完全匹配的字符串.示例:

NSArray *arrayNames = [context fetchObjectsForEntityName:NSStringFromClass([PatientFamilyMember class])
      withSortColumn:nil withSortDescending:FALSE
      withPredicate:@"patientID = %@ && firstName=[c]%@ && relationship=[c]%@ && lastName=[c]%@",
      self.pfm.patientID, firstName, relationship, lastName];
Run Code Online (Sandbox Code Playgroud)

这有效,但我还没有理解使用LIKE [c]和之间的区别= [c]%@.

Mar*_*n R 13

谓词LIKE=谓词之间的区别在于LIKE允许?*作为通配符,其中?匹配1个字符并*匹配0个或更多个字符.

可以修改两者LIKE并指定不区分大小写.=[c]

示例:假设您有包含名称的对象

"Mark", "mark", "Mike", "mike", "M*"
Run Code Online (Sandbox Code Playgroud)

[NSPredicate predicateWithFormat:@"name = %@", @"Mark"];
[NSPredicate predicateWithFormat:@"name LIKE %@", @"Mark"];
Run Code Online (Sandbox Code Playgroud)

找到"马克",两者兼而有之

[NSPredicate predicateWithFormat:@"name =[c] %@", @"Mark"];
[NSPredicate predicateWithFormat:@"name LIKE[c] %@", @"Mark"];
Run Code Online (Sandbox Code Playgroud)

找到"马克"和"马克".但只有LIKE运算符才能与通配符一起使用,例如

[NSPredicate predicateWithFormat:@"name LIKE[c] %@", @"M*"];
Run Code Online (Sandbox Code Playgroud)

找到"Mark","mark","Mike","mike"和"M*",但是

[NSPredicate predicateWithFormat:@"name ==[c] %@", @"M*"];
Run Code Online (Sandbox Code Playgroud)

只找到"M*".

有关详细信息,请参阅"谓词编程指南"中的字符串比较.