获取未保存数据时的奇怪核心数据行为

时间:2012-05-06 20:24:09

标签: core-data ios5 nsfetchrequest

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

但我发现我的NSFetchRequest与最近存储的尚未保存的记录不匹配。而且我看到看似相同的查询会产生不同的意外结果。

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

fetchTest.predicate = [NSPredicate predicateWithFormat:@"%K = 3882", @"intEmployee_id"];

但这个看似相同的不是:

fetchTest.predicate = [NSPredicate predicateWithFormat:@"%K = %@", @"intEmployee_id", @"3882"];

但是 - 在将上下文保存到持久存储之后,它们都匹配相同。

Apple的文档说默认情况下提取应该可以对待挂起的更改,实际上我已经确定[fetchTest includesPendingChanges] = YES。

这里到底发生了什么想法?这两个抓取器返回不同结果的可能性如何?

2 个答案:

答案 0 :(得分:1)

也许员工ID不是字符串而是数字?然后谓词应该是:

[NSPredicate predicateWithFormat:@"%K = %@", @"intEmployee_id",
                                             [NSNumber numberWithInt:3882]];

这意味着不稳定的行为来自混合类型。它仍然以某种方式工作,即使是不正常的,因为在SQLite文档中,它表示在物理存储数据时,SQLite实际上并没有真正区分类型。

请参阅SQLite网站上的Distinctive Features of SQLite,标题为 Manifest Typing

答案 1 :(得分:1)

这些实际上并没有评估到相同的值。

[NSPredicate predicateWithFormat:@"%K = 3882", @"intEmployee_id"]

时评估为intEmployee_id = 3882
[NSPredicate predicateWithFormat:@"%K = %@", @"intEmployee_id", @"3882"]

评估为intEmployee_id = "3882"

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