0

我在使用NSFetchResultsController時遇到了一些麻煩,並尋求一些幫助。帶有sectionsNameKeyPath和結果順序的NSFetchResultsController

我CoreData實體FunCentre具有以下屬性namelatitudelongitudecountrypostcodefavourite。當用戶在tableview中選擇一行時,它將favourite屬性設置爲1,再次點擊時將它設置爲0.這一切都正常工作,因爲我檢查了sqlite文件並且更改正確地發生。

我想使用部分來分隔行和非那些行。我希望收藏夾列在第一部分的tableview頂部,列表的其餘部分列在第二部分。

NSSortDescriptor *sortDescriptor = [[NSSortDescriptor alloc] initWithKey:@"name" ascending:YES]; 
NSArray *sortDescriptors = [NSArray arrayWithObjects:sortDescriptor, nil]; 
[fetchRequest setSortDescriptors:sortDescriptors]; 

NSFetchedResultsController *frc = [[NSFetchedResultsController alloc] initWithFetchRequest:fetchRequest 
managedObjectContext:self.managedObjectContext 
sectionNameKeyPath:@"favourite" 
     cacheName:nil]; 

上面的代碼工作,而在應用程序和不斷變化的奪冠熱門,但是當我關閉應用程序,然後重新啓動它的收藏夾不進行分組和按字母順序正好出現在主力名單,但它還是把正確的最喜歡的部分中的行數。

SQL調試結果

CoreData: sql: SELECT Z_VERSION, Z_UUID, Z_PLIST FROM Z_METADATA 

CoreData: sql: SELECT 0, t0.Z_PK, t0.Z_OPT, t0.ZCOUNTRY, t0.ZFAVOURITE, t0.ZLATITUDE, t0.ZLONGITUDE, t0.ZNAME, t0.ZPOSTCODE FROM ZFUNCENTRE t0 ORDER BY t0.ZNAME 

CoreData: annotation: sql connection fetch time: 0.0051s 

CoreData: annotation: total fetch execution time: 0.0106s for 34 rows. 

CoreData: sql: SELECT t0.ZFAVOURITE, COUNT (DISTINCT t0.Z_PK) FROM ZFUNCENTRE t0 GROUP BY t0.ZFAVOURITE ORDER BY t0.ZFAVOURITE 

誰能告訴我,爲什麼分組不上重新啓動工作?還有如何更改分組順序?因爲收藏夾出現在底部,我希望它們位於頂部。

提前非常感謝

回答

2

使用sectionNameKeyPath,您必須使用相同的密鑰(或至少產生相同的相對排序)添加排序描述:

NSSortDescriptor *sort1 = [[NSSortDescriptor alloc] initWithKey:@"favourite" ascending:YES]; 
NSSortDescriptor *sort2 = [[NSSortDescriptor alloc] initWithKey:@"name" ascending:YES]; 
NSArray *sortDescriptors = [NSArray arrayWithObjects:sort1, sort2, nil]; 
[fetchRequest setSortDescriptors:sortDescriptors]; 
+0

感謝馬丁,這個問題解決了隨訂單一起發佈。如何更改欄目順序?我想在頂部和下面的列表中的其他部分,它目前相反。 –

+0

@MattPrice:將'升序:YES'更改爲'升序:NO' :-) –

+0

完美..很多感謝您的快速回復和很好的答案。 –