Core data 获取未保存数据时出现奇怪的核心数据行为

Core data 获取未保存数据时出现奇怪的核心数据行为,core-data,ios5,nsfetchrequest,Core Data,Ios5,Nsfetchrequest,我有一个核心数据导入器,它在数据中循环,并在导入过程中忽略重复记录 但我发现我的NSFetchRequest与最近存储的未保存记录不匹配。我看到看似相同的查询产生了不同的、意想不到的结果 例如,在测试中,我发现此查询匹配并返回结果: fetchTest.predicate = [NSPredicate predicateWithFormat:@"%K = 3882", @"intEmployee_id"]; 但这一看似相同的事实并非如此: fetchTest.predicate = [NSPr

我有一个核心数据导入器,它在数据中循环,并在导入过程中忽略重复记录

但我发现我的NSFetchRequest与最近存储的未保存记录不匹配。我看到看似相同的查询产生了不同的、意想不到的结果

例如,在测试中,我发现此查询匹配并返回结果:

fetchTest.predicate = [NSPredicate predicateWithFormat:@"%K = 3882", @"intEmployee_id"];
但这一看似相同的事实并非如此:

fetchTest.predicate = [NSPredicate predicateWithFormat:@"%K = %@", @"intEmployee_id", @"3882"];
但是-在将上下文保存到持久性存储后,它们会完全匹配

苹果的文档说,默认情况下,fetches应该针对挂起的更改工作,事实上,我已经确认[fetchTest includesPendingChanges]=YES


你知道这到底是怎么回事吗?这两个回迁怎么可能返回不同的结果?

可能员工id不是字符串而是数字?那么谓词应该是:

[NSPredicate predicateWithFormat:@"%K = %@", @"intEmployee_id",
                                             [NSNumber numberWithInt:3882]];
这意味着不稳定的行为来自混合类型。它仍然以某种方式工作,即使不稳定,因为在SQLite文档中,它说SQLite实际上在物理存储数据时并没有真正区分类型


请参阅SQLite网站标题下的Manifest Typing

这些值实际上不等于相同的值

[NSPredicate predicateWithFormat:@"%K = 3882", @"intEmployee_id"]
计算结果为
intEmployee\u id=3882

[NSPredicate predicateWithFormat:@"%K = %@", @"intEmployee_id", @"3882"]
计算结果为
intEmployee\u id=“3882”


尝试使用数字而不是字符串作为id。

事实上-我注意到它们的计算结果是这两个不同的查询字符串,但在数据库保存到持久性存储之后,它们的执行情况相同,但在保存之前则不同。我会将此作为一个错误提交给Apple,因为它们在保存之前和之后应该具有相同的行为。。。即使他们是不同的,他们可能应该评估相同的。太好了!请在收到回复时更新。同时使用NSN号码有效吗?我想你可能知道一些事情。。。我习惯于SQLite不按类型进行区分,到目前为止,我所有的核心数据实验都没有问题,即使下面的数据字段是一个数字,也可以用字符串来组装谓词。核心数据有意隐藏数据库层。您预期的行为是不可预测的。查询ID的正确方法是上面的代码。试试看,如果它解决了问题,请告诉我。