2013-02-01 31 views
0

我使用NSFetchedResultsController从Core Data中从数据库中获取数据。而且我有一个具有2个属性的实体,NSString的prop1和prop2。
我怎样才能不仅通过其中一个属性对部分进行排序?
现在是:iOS NSFetchedResultsController:按大于等于2的属性排序

Title1ForProp1/Title2ForProp2 (prop1==1 prop2==2) 
Title1ForProp1/Title1ForProp2 (prop1==1 prop2==1) 
Title2ForProp1/Title1ForProp2 (prop1==2 prop2==1) 

我需要:

Title1ForProp1/Title1ForProp2 (prop1==1 prop2==1) 
Title1ForProp1/Title2ForProp2 (prop1==1 prop2==2) 
Title2ForProp1/Title1ForProp2 (prop1==2 prop2==1) 

回答

3

当您创建了国家自然科学基金的提取请求创建排序描述符,并给请求的数组。

您可以在阵列中放置尽可能多的排序描述符。

只需为要排序的每个字段创建一个排序描述符。

我可以记得你必须把它们放到数组中。

OK,所以代码明智...

NSSortDescriptor *sd1 = [[NSSortDescriptor alloc] initWithKey:@"prop1" ascending:YES]; 
NSSortDescriptor *sd2 = [[NSSortDescriptor alloc] initWithKey:@"prop2" ascending:YES]; 

[fetchRequest setSortDescriptors:@[sd1, sd2]]; 

这是你必须做的。

如果你给它一个sectionNameKeyPath,NSFC将只把它们分成几个部分。如果你不想要任何部分,那么创建sectionNameKeyPath nil。

+0

请参阅[参考](http://developer.apple.com/library/ios/#documentation /CoreData/Reference/NSFetchedResultsController_Class/Reference/Reference.html#//apple_ref/occ/instm/NSFetchedResultsController/initWithFetchRequest:managedObjectContext:sectionNameKeyPath:cacheName :)。 “如果控制器生成段,则使用数组中的第一个排序描述符将这些对象组合成段;”。但我需要通过2个属性对它进行排序,也许存在解决方法。 – surlac

+0

你试过我说的吗? – Fogmeister

+0

添加了您需要执行的代码。你没有提供任何关于你在做什么或者你尝试过什么的实际细节,但是把它放在那里(至少在我说过之前试着说错了)。这应该做你所问的。 – Fogmeister

1

Fogmeister的排序描述符数组是合适的(按照prop1然后是prop2排序),但是如果在sectionNameKeyPath中提供prop1,则只能通过prop1分割您的部分。在每个部分中,项目将按prop1和prop2进行排序。

如果这不是你想要的,你需要另外将结果按prop1和prop2分成不同的部分,你可能需要创建一个瞬态属性,将prop1和prop2连接起来,并提供瞬态属性作为sectionNameKeyPath。这不仅提供该部分的标题,而且还确定如何将结果分组为各部分。

看看这个问题,你如何可以创建一个短暂的财产为您节名称: NSFetchedResultsController with sections created by first letter of a string