问题是,我发现当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 – * /所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)