我需要我的對象進行排序段排序使用NSFetchedResultsController部分由
[[NSFetchedResultsController alloc] initWithFetchRequest:request
managedObjectContext:context
sectionNameKeyPath:sectionName
cacheName:nil];
我想通過自己的class
對它們進行排序。例如,MyObjectType
類型的對象進入一個部分,而OtherObjectType
類型的對象進入第二部分,其中兩個對象類型將出現在結果中,因爲OtherObjectType
繼承自MyObjectType
。通過@"class"
作爲sectionNameKeyPath
參數在上述方法似乎工作。但是,要獲得正確的排序我還需要NSFetchRequest
的排序描述符進行排序基於類:
NSSortDescriptor *sectionDescriptor = [NSSortDescriptor
sortDescriptorWithKey:@"class"
ascending:YES];
使用這種描述給我的錯誤Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: 'keypath class not found in entity
。
爲了清楚起見,這裏是代碼的完整塊,我想工作:
NSFetchRequest* myRequest = [[NSFetchRequest alloc]
initWithEntityName:@"myEntityName"];
NSSortDescriptor *nameDescriptor = [NSSortDescriptor
sortDescriptorWithKey:@"myName"
ascending:YES];
NSSortDescriptor *sectionDescriptor = [NSSortDescriptor
sortDescriptorWithKey:@"class"
ascending:YES];
request.sortDescriptors = @[sectionDescriptor, nameDescriptor];
[[NSFetchedResultsController alloc]
initWithFetchRequest:myRequest
managedObjectContext:myContext
sectionNameKeyPath:@"class"
cacheName:nil];
沒錯。我忘了提及我正在處理的類是我用結果控制器提取的類中的所有子實體。所以,他們都在那裏。我只是需要按課程來排序。目前,我在父實體上使用字符串屬性來標識節。我希望我能擺脫那個財產。 –
該屬性可以幫助您,因爲它允許您在持久性存儲級別執行此操作,而不必在內存中執行操作(除非您正在使用內存存儲)。如果使用SQLite,這比在內存中執行它更快,並且要查找每個實體/子實體的類成員的運行時值。總之,你已經做得很好。 – J2theC
我甚至沒有想到執行運行時變量檢查的成本。總之,我認爲這是做到這一點的最佳方式。我會繼續與我目前使用的屬性將它們分成幾個部分。 –