Iphone 核心数据获取不一致

Iphone 核心数据获取不一致,iphone,objective-c,ios,cocoa-touch,core-data,Iphone,Objective C,Ios,Cocoa Touch,Core Data,我正在与一个非常小的样本项目,可以。我试图做的是调试为什么在我自己的项目中抓取花费了这么长时间,但我已经将此项目用作一种基准测试。我已经在我的方案中启用了-com.apple.CoreData.SQLDebug 1,这样我就可以看到我的回迁将哪些命令发送到SQLite存储 首先,在AppDelegate中,我只是将第一部分(创建银行的地方)包装在for循环中,以创建1000个对象。它们注释掉来自AppDelegate的获取请求 然后,在FBCFMasterViewController中,有一个获

我正在与一个非常小的样本项目,可以。我试图做的是调试为什么在我自己的项目中抓取花费了这么长时间,但我已经将此项目用作一种基准测试。我已经在我的方案中启用了
-com.apple.CoreData.SQLDebug 1
,这样我就可以看到我的回迁将哪些命令发送到SQLite存储

首先,在AppDelegate中,我只是将第一部分(创建银行的地方)包装在for循环中,以创建1000个对象。它们注释掉来自AppDelegate的获取请求

然后,在FBCFMasterViewController中,有一个获取请求。保存1000个项目后运行应用程序并将其提取到NSFetchedResultsController时,您将看到数千行类似于以下内容的输出行:

2012-06-23 09:16:30.374 FailedBankCD[90166:fb03] CoreData: annotation: sql connection fetch time: 0.0004s
2012-06-23 09:16:30.375 FailedBankCD[90166:fb03] CoreData: annotation: total fetch execution time: 0.0009s for 1 rows.
2012-06-23 09:16:30.375 FailedBankCD[90166:fb03] CoreData: annotation: fault fulfilled from database for : 0xc3e9060 <x-coredata://60E5B64A-83AB-4E6A-BEAD-5FFF50DB7F66/FailedBankDetails/p823>
2012-06-23 09:16:30.376 FailedBankCD[90166:fb03] CoreData: sql: SELECT 0, t0.Z_PK, t0.Z_OPT, t0.ZCLOSEDATE, t0.ZUPDATEDATE, t0.ZZIP, t0.ZINFO FROM ZFAILEDBANKDETAILS t0 WHERE  t0.Z_PK = ?
我不再重复数千行输出,这似乎是预期的输出。但是,如果我再次运行,甚至不修改任何内容,我将再次获得数千行输出,如下所示:

2012-06-23 09:19:31.263 FailedBankCD[90216:fb03] CoreData: annotation: sql connection fetch time: 0.0006s
2012-06-23 09:19:31.264 FailedBankCD[90216:fb03] CoreData: annotation: total fetch execution time: 0.0010s for 20 rows.
2012-06-23 09:19:31.264 FailedBankCD[90216:fb03] CoreData: sql: SELECT 0, t0.Z_PK, t0.Z_OPT, t0.ZCITY, t0.ZNAME, t0.ZSTATE, t0.ZDETAILS FROM ZFAILEDBANKINFO t0 WHERE  t0.Z_PK IN  (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)  ORDER BY t0.ZCITY DESC LIMIT 20

这是奇怪的行为,不是吗?任何人都可以快速复制这一点,并解释发生了什么,以及为什么我会得到数千行输出?

close\u date
city
没有索引,这就是为什么会有数千条查询,而且性能可能很低的原因。对于跑步之间的差异,我敢打赌您正在使用的缓存:

NSFetchedResultsController *theFetchedResultsController =
[[NSFetchedResultsController alloc] initWithFetchRequest:fetchRequest
                                    managedObjectContext:managedObjectContext sectionNameKeyPath:nil
                                               cacheName:@"Root"];

结果是一样的吗?我不会担心隐藏在幕后的核心数据查询。
NSFetchedResultsController *theFetchedResultsController =
[[NSFetchedResultsController alloc] initWithFetchRequest:fetchRequest
                                    managedObjectContext:managedObjectContext sectionNameKeyPath:nil
                                               cacheName:@"Root"];