逃避不间断的空间作为NSPredicate中的参数

时间:2013-10-28 13:25:44

标签: ios core-data nspredicate

我想过滤掉空记录,但我无法删除没有数据但有一系列空格的记录。

我有一个名为“name”的实体A.我想查询实体A的所有对象,这些对象具有属性名称的一些文本值而不是“空间系列”,换句话说,我需要在查询中包含它 - >

[name stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet].length!=0

但我所能做的就是检查字符串的长度,包括不正确的空格。 我正在使用 - >

     NSPredicate* predicate = [NSPredicate predicateWithFormat:@"name!=' ' or name.length!=0 "];

欢迎您提出建议。

2 个答案:

答案 0 :(得分:0)

你可以修剪字符串并检查字符串的长度,如下所示:

NSString *trimmedString = [aRecordString stringByTrimmingCharactersInSet:[[NSCharacterSet characterSetWithCharactersInString:@" "]]];

if (trimmedString.lenght > 0) {

    // the string if valid or at least is not just a spaces string
}
else {

    // the string is not valid or was just a spaces string
}

因此,如果要在谓词中应用此检查,可以使用带块的谓词:

    NSPredicate *predicate = [NSPredicate predicateWithBlock:^BOOL(id evaluatedObject, NSDictionary *bindings) {

        // do your checks here and return TRUE or FALSE if the ovject match your criteria
}];

答案 1 :(得分:0)

如果您尝试删除特定字符串属性仅包含空格的对象,请使用基于正则表达式的谓词,然后删除您找到的任何对象。

使用这样的谓词进行提取会找到所有这些对象:

NSPredicate *reqPredicate = [NSPredicate predicateWithFormat:@"attributeName matches ' +'"];

找到后,使用-[NSManagedObjectContext deleteObject:]删除生成的对象。