Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/typescript/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Core data 当字符串以算术运算符+;-*/_Core Data_Nspredicate - Fatal编程技术网

Core data 当字符串以算术运算符+;-*/

Core data 当字符串以算术运算符+;-*/,core-data,nspredicate,Core Data,Nspredicate,我有一个简单的方法,使用NSPredicate返回comments.length>0的行数 问题是,我发现当注释列以+-*或/开头时,length属性的计算结果总是为0,因此该行被排除在计数之外 我在SQLite浏览器中打开了该表,并验证了该列是否为VARCHAR。使用SQLite查询检查字符串长度效果很好(length(ZComments)>0),所以这一定是CoreData的问题 这是我的功能 -(int)getCommentsCount{ NSFetchRequest *reque

我有一个简单的方法,使用NSPredicate返回comments.length>0的行数

问题是,我发现当注释列以+-*或/开头时,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失败的原因


有人遇到过这种情况吗?

您不能在核心数据获取请求中使用像
length
这样的Objective-C函数 (当核心数据转换获取请求时,“.length”部分被忽略 到SQLite查询)。但您可以简单地与空字符串进行比较:

 [NSPredicate predicateWithFormat:@"comment != ''"]
对于涉及长度的其他查询,可以使用MATCHES运算符
如下所示的正则表达式:.

不是错误的原因,但方法签名应该是
-(NSUInteger)commentsCount
。匹配
-countForFetchRequest:error:
的返回类型,并且不要使用
get
启动方法名称,除非它们间接返回多个项()。此外,使用
.length
有时可能有效的原因是核心数据将
comments.length>0
转换为SQL,类似于
t0.ZCOMMENTS>0
,从而丢失查询的“长度”部分。对我来说,这似乎是个错误,但目前情况就是这样。我不知道SQLite如何在
>0
比较中计算字符串,但这不是
注释所暗示的。长度
。非常好的解释,谢谢!我甚至通过将“.length”更改为“.foo”来验证这一点,并得到了相同的结果。使用NSPredicate比较字符串长度是否合法?此外。。。。最好有人告诉另一条线上的人他们做错了@iupchris10:“comment.length>0”和类似内容在过滤数组时有效。它仅对核心数据获取请求失败(答案的一条注释中已经提到)。@iupchris10:其他字符串长度比较可以使用正则表达式完成(如我链接的答案所示)。@MartinR-谢谢。我还偶然发现了这个线程,它建议在托管对象中添加一个长度属性,并在文本值更改时进行设置。-[连结]