2

我对 NSFetchedResultsController 的初始提取返回 O 对象。大多数时候(我会说10次中有9次)。这不是一个总是可以重现的错误。

有时我对表格的要求会改变,我的谓词也会改变。在这种情况下,我删除缓存并将我的 FetchedResultsController 设置为 nil,然后再重新创建它。在这些后续提取中,它始终返回正确的对象。

有问题的提取从涉及关系的实体中获取对象。

NSFetchRequest *fetch = [NSFetchRequest fetchRequestWithEntityName:@"FacebookPost"];
fetch.predicate = [NSPredicate predicateWithFormat:@"postedBy.facebookID == %@", self.user.facebookID];

我有两个实体,|用户| 和 |Facebook 帖子| 用户与名为 facebookPosts 的 FacebookPost 具有一对多关系 FacebookPost 与名为 postedBy 的用户具有多对一关系 用户具有我在谓词中使用的 facebookID(见上文)

我尝试过延迟获取以防数据库未准备好,但无济于事。

谁能想到为什么这不是(大部分时间)在初始提取时正确提取?

更新:

如果我在 Xcode 中打开 sql 调试,它会在它工作的时候任意使用不同的 SQL 语句而不是:

工作过:

2013-03-27 06:41:58.420 App[5995:907] CoreData: sql: SELECT COUNT(DISTINCT t0.Z_PK) 从 ZFACEBOOKPOST t0 WHERE t0.ZPOSTEDBY = ?

2013-03-27 06:41:58.432 App[5995:907] CoreData: sql: SELECT 0, t0.Z_PK, t0.Z_OPT, t0.ZMESSAGE, t0.ZSTATUSID, t0.ZTIME, t0.ZPOSTEDBY FROM ZFACEBOOKPOST t0 WHERE t0.Z_PK IN (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?) ORDER BY t0.ZTIME DESC 限制 20

没用:

2013-03-27 06:24:06.638 App[66275:c07] CoreData: sql: SELECT COUNT(DISTINCT t0.Z_PK) 从 ZFACEBOOKPOST t0 加入 ZUSER t1 ON t0.ZPOSTEDBY = t1.Z_PK 其中 t1.ZFACEBOOKID = ?

2013-03-27 06:24:06.641 App[66275:c07] CoreData: sql: SELECT 0, t0.Z_PK, t0.Z_OPT, t0.ZMESSAGE, t0.ZSTATUSID, t0.ZTIME, t0.ZPOSTEDBY FROM ZFACEBOOKPOST t0 JOIN ZUSER t1 ON t0.ZPOSTEDBY = t1.Z_PK WHERE t1.ZFACEBOOKID = ? ORDER BY t0.ZTIME DESC

所以这让我觉得它与核心数据决定在 SQL 中执行提取的方式有关。

4

0 回答 0