2015-01-06 41 views
0

我的數據庫有兩個表ZDESTINATIONZPOSTIT。有多對一的關係,一個PostIt可以有很多Destination s。我想獲得所有的Destination行(其中有9行),我正在使用NSFetchRequest。但只有3行正在返回。我沒有指定謂詞。我有一個排序順序和部分鍵名路徑爲@"postIt.creationTime"。我檢查了數據庫和所有postIts有一個創建時間,所有目的地有一個有效postit關係。核心數據與sqlite返回只有3行

這是非常簡化的查詢。

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 

目的地(主鍵,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外連接。

你有任何想法或提示如何調試?

這是核心數據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

+0

WHERE子句從哪裏來? –

+0

你能否提供獲取請求? –

+0

添加您使用的核心數據代碼,因爲這不是您實際嘗試的內容的有用描述。 –

回答

1

根據我的評論,問題可能是由於獲取的結果控制器的緩存。你可以用它來清除它

[NSFetchedResultsController deleteCacheWithName:@"TrailIt"];