gpt4 book ai didi

core-data - iOS - 当字符串以算术运算符 + - */开头时,NSPredicate string.length 始终计算为 0

转载 作者:行者123 更新时间:2023-12-04 23:50:49 25 4
gpt4 key购买 nike

我有一个简单的方法,它使用 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 会失败。

有人遇到过这种情况吗?

最佳答案

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

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

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

关于core-data - iOS - 当字符串以算术运算符 + - */开头时,NSPredicate string.length 始终计算为 0,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22767022/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com