带有 sqlite 的核心数据仅返回 3 行
Core Data with sqlite returning only 3 rows
我的数据库有两个表 ZDESTINATION 和 ZPOSTIT。多对一的关系,一个PostIt
可以有很多Destination
。我想获取所有 Destination
行(其中有 9 行)并且我正在使用 NSFetchRequest
。但只返回 3 行。我没有指定谓词。我有一个排序顺序和一个部分 keynamepath 作为 @"postIt.creationTime"
。我检查了数据库,所有 postIts
都有一个创建时间,所有目的地都有一个有效的 postit
关系。
这是非常简化的查询。
SELECT t0.Z_ENT, t0.Z_PK, t0.ZPOSTIT
FROM ZDESTINATION t0
LEFT OUTER JOIN ZPOSTIT t1 ON t0.ZPOSTIT = t1.Z_PK
WHERE t0.Z_PK IN (?,?,?)
ORDER BY t1.ZCREATIONTIME DESC
LIMIT 20
DESTINATION(主键,PostIt)
"1" "3"
"2" "2"
"3" "4"
"4" "5"
"5" "5"
"6" "5"
"7" "7"
"8" "7"
"9" "7"
POSTIT 主键,创建时间
"1" "442134908.015139"
"2" "442134921.469915"
"3" "442134941.083225"
"4" "442135028.839804"
"5" "442212344.121323"
"6" "442212468.053344"
"7" "442214203.670005"
请注意,LEFT OUTERJOIN 是由获取请求自动生成的。
关于如何调试,您有什么想法或提示吗?
这是核心数据NSFetchRequest
。
NSFetchRequest *fetchRequest = [ [ NSFetchRequest alloc ] init ];
NSEntityDescription *entity = [ NSEntityDescription entityForName:@"Destination"
inManagedObjectContext:studyStageAssets.postItMoContext ];
[ fetchRequest setEntity:entity ];
// Create the sort descriptors array.
NSSortDescriptor *creationTimeDescriptor = [ [ NSSortDescriptor alloc ]
initWithKey:@"postIt.creationTime"
ascending:NO ];
NSArray *sortDescriptors = @[ creationTimeDescriptor ];
[ fetchRequest setSortDescriptors:sortDescriptors ];
// Create and initialize the fetch results controller.
_fetchedResultsController = [ [ NSFetchedResultsController alloc ]
initWithFetchRequest:fetchRequest
managedObjectContext:studyStageAssets.postItMoContext
sectionNameKeyPath:@"postIt.creationTime"
cacheName:@"TrailIt" ];
_fetchedResultsController.delegate = self;
紧接着是 performFetch
。
根据我的评论,问题可能是由于获取结果控制器的缓存引起的。您可以使用
清除它
[NSFetchedResultsController deleteCacheWithName:@"TrailIt"];
我的数据库有两个表 ZDESTINATION 和 ZPOSTIT。多对一的关系,一个PostIt
可以有很多Destination
。我想获取所有 Destination
行(其中有 9 行)并且我正在使用 NSFetchRequest
。但只返回 3 行。我没有指定谓词。我有一个排序顺序和一个部分 keynamepath 作为 @"postIt.creationTime"
。我检查了数据库,所有 postIts
都有一个创建时间,所有目的地都有一个有效的 postit
关系。
这是非常简化的查询。
SELECT t0.Z_ENT, t0.Z_PK, t0.ZPOSTIT
FROM ZDESTINATION t0
LEFT OUTER JOIN ZPOSTIT t1 ON t0.ZPOSTIT = t1.Z_PK
WHERE t0.Z_PK IN (?,?,?)
ORDER BY t1.ZCREATIONTIME DESC
LIMIT 20
DESTINATION(主键,PostIt)
"1" "3"
"2" "2"
"3" "4"
"4" "5"
"5" "5"
"6" "5"
"7" "7"
"8" "7"
"9" "7"
POSTIT 主键,创建时间
"1" "442134908.015139"
"2" "442134921.469915"
"3" "442134941.083225"
"4" "442135028.839804"
"5" "442212344.121323"
"6" "442212468.053344"
"7" "442214203.670005"
请注意,LEFT OUTERJOIN 是由获取请求自动生成的。
关于如何调试,您有什么想法或提示吗?
这是核心数据NSFetchRequest
。
NSFetchRequest *fetchRequest = [ [ NSFetchRequest alloc ] init ];
NSEntityDescription *entity = [ NSEntityDescription entityForName:@"Destination"
inManagedObjectContext:studyStageAssets.postItMoContext ];
[ fetchRequest setEntity:entity ];
// Create the sort descriptors array.
NSSortDescriptor *creationTimeDescriptor = [ [ NSSortDescriptor alloc ]
initWithKey:@"postIt.creationTime"
ascending:NO ];
NSArray *sortDescriptors = @[ creationTimeDescriptor ];
[ fetchRequest setSortDescriptors:sortDescriptors ];
// Create and initialize the fetch results controller.
_fetchedResultsController = [ [ NSFetchedResultsController alloc ]
initWithFetchRequest:fetchRequest
managedObjectContext:studyStageAssets.postItMoContext
sectionNameKeyPath:@"postIt.creationTime"
cacheName:@"TrailIt" ];
_fetchedResultsController.delegate = self;
紧接着是 performFetch
。
根据我的评论,问题可能是由于获取结果控制器的缓存引起的。您可以使用
清除它[NSFetchedResultsController deleteCacheWithName:@"TrailIt"];