core-data – iOS – 当字符串以算术运算符开头时,NSPredicate string.length总是求值为0 – *

core-data – iOS – 当字符串以算术运算符开头时,NSPredicate string.length总是求值为0 – * ,第1张

概述我有一个简单的方法,使用NSPredicate返回其中的行数,其中comments.length> 0. 问题是,我发现当Comment列以 – *或/开头时,length属性总是计算为0,因此该行将从计数中排除. 我在SQLite浏览器中打开了表,并验证了该列是VARCHAR.使用SQLite查询检查字符串长度可以正常工作(LENGTH(ZComments)> 0),因此这必须是CoreData 我有一个简单的方法,使用nspredicate返回其中的行数,其中comments.length> 0.

问题是,我发现当Comment列以 – *或/开头时,length属性总是计算为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会失败.

这发生在任何人身上吗?

解决方法 您不能在Core Data fetch请求中使用Objective-C函数,例如length
(当Core Data转换获取请求时,简单地忽略“.length”部分
到sqlite查询).但您可以简单地与空字符串进行比较:

[nspredicate predicateWithFormat:@"comment != ''"]

对于涉及长度的其他查询,可以使用MATCHES运算符
一个正则表达式,如下所示:CoreData predicate: string property length?.

总结

以上是内存溢出为你收集整理的core-data – iOS – 当字符串以算术运算符开头时,NSPredicate string.length总是求值为0 – * /全部内容,希望文章能够帮你解决core-data – iOS – 当字符串以算术运算符开头时,NSPredicate string.length总是求值为0 – * /所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1057430.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-25
下一篇 2022-05-25

发表评论

登录后才能评论

评论列表(0条)

保存