我有一个简单的方法,使用 NSPredicate 返回 comments.length > 0 的行数。
问题是,我发现当 Comment 列以 + - * 或 / 开头时,长度属性的计算结果始终为 0,因此该行被排除在计数之外。
我在 SQLite 浏览器中打开表并验证该列是 VARCHAR。使用 SQLite 查询来检查字符串长度效果很好 (LENGTH(ZComments) > 0),因此这一定是 CoreData 问题。
这是我的功能...
-(int)getCommentsCount{
NSFetchRequest *request = [[[NSFetchRequest alloc] init] autorelease];
[request setIncludesSubentities:YES];
[request setEntity:[NSEntityDescription entityForName:@"InspectionRecord" inManagedObjectContext:managedObjectContext]];
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"(comments.length > 0)"];
[request setPredicate:predicate];
NSError *err;
NSUInteger count = [managedObjectContext countForFetchRequest:request error:&err];
//count is ALWAYS 0 if 'comments' starts with + - * or / WHYYY???
return count;
}
我可以通过检查空/空字符串而不是使用 .length 来解决这个问题,但我真的很想知道为什么当字符串以某些字符开头时 .length 会失败。
有人发生过这种情况吗?
您不能使用 Objective-C 函数,例如length
在核心数据获取请求中
(当 Core Data 转换获取请求时,“.length”部分会被忽略
到 SQLite 查询)。但您可以简单地与空字符串进行比较:
[NSPredicate predicateWithFormat:@"comment != ''"]
对于涉及长度的其他查询,您可以使用 MATCHES 运算符
正则表达式如下所示:CoreData 谓词:字符串属性长度? https://stackoverflow.com/questions/19889211/coredata-predicate-string-property-length.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)