6

我有這樣一個如此核心數據模型......NSFetchedResultsController:排序描述符和部分

[Country] <--->> [League] <--->> [Match] 

而我使用的是NSFetchedResultsController顯示MatchesUITableView

我已經做了這一百萬次之前,但由於某些原因部分出錯了,我不能解決原因。

我創建了排序的描述是這樣的...

NSSortDescriptor *countrySD = [NSSortDescriptor sortDescriptorWithKey:@"league.country.name" ascending:YES]; 
    NSSortDescriptor *leagueSD = [NSSortDescriptor sortDescriptorWithKey:@"league.name" ascending:YES]; 
    NSSortDescriptor *dateSD = [NSSortDescriptor sortDescriptorWithKey:@"startDate" ascending:YES]; 
    request.sortDescriptors = @[countrySD, leagueSD, dateSD]; 

首先我想檢查我在正確的順序把這些。這應該先按country.name排序,然後按league.name排序,然後按startDate排序。

  1. 任何東西Albania應該進來Spain任何東西之前。
  2. 在一個國家/地區,League 1中的任何內容都應在League 2之前。
  3. 在單個聯賽中,所有比賽都應以startDate順序顯示,並且最早排在第一位。

然後我創建了NSFRC這個...

_fetchedResultsController = [[NSFetchedResultsController alloc] initWithFetchRequest:request managedObjectContext:self.moc sectionNameKeyPath:@"league.leagueID" cacheName:nil]; 

所以這應該由一羣具有不同league.leagueID值匹配表。

它應該是這樣的......

Albania - League 1 
    12:00 
    13:00 
Albania - League 2 
    09:00 
    14:00 
France - League 1 
    09:00 
Spain - A League 
    08:00 
    12:00 
Spain - B League 
    09:00 

它不工作,雖然。我爲同一聯盟獲得了多個標題。一些比賽出現在錯誤的標題等...

我檢查了出現在錯誤的聯賽下的比賽的值(NSLogged),他們實際上有正確的聯賽。所以即使他們有Spain - A League他們出現在France - League A(例如)。

任何想法如何解決這個問題?

回答

15

用作參數sectionNameKeyPath的鍵路徑必須與第一個排序描述符中使用的相同的鍵 (或生成相同的相對排序)。

有(據我所知)沒有辦法使用兩個或更多的排序描述符來將獲取的結果控制器的結果分組爲 。

+0

謝謝。將不得不採取與獲取請求並設置我自己的上下文觀察器:( – Fogmeister

+3

@Fogmeister:或者,您可以添加一個額外的屬性,其中包含''並將其用作部分鍵和第一個排序描述符 –

+0

哦,這聽起來像是一個計劃,我會把它放到聯盟班嗎? – Fogmeister