我遇到问题如何制定NSPredicate来获取正确的数据。我有三个实体(Offer,List,Item)和一个实体OfferMatch wchich匹配每对的商品(List,Item)。
我正在尝试从所选列表中获取所有优惠,但不同的商品可以提供相同的优惠,当我获取它们时,我会获得一些重复的优惠。我希望得到不同的答案,而不是任何报价不止一次。
我试图使用:
[NSFetchRequest setResultType:NSDictionaryResultType]
[NSFetchRequest ssetPropertiesToFetch:
[NSFetchRequest ssetReturnsDistinctResults:YES]
但NSFetchResultsController根本不支持NSDictionaryResultType
。
以下是我设置NSFetchResultsController时的示例代码:
NSFetchRequest *request = [[NSFetchRequest alloc] init];
// I'm interested in both Offer of OfferMAtch entity to get, so you can select more usefull for you
NSEntityDescription *entity = [NSEntityDescription entityForName:@"Offer or OfferMatch" inManagedObjectContext:[CoreDataHandler context]];
[request setEntity:entity];
// I want to get all Offers from selected List, but with each one being only once
NSPredicate *predicate = [NSPredicate predicateWithFormat:@" ---- HERE IS MAGIC --- "];
[request setPredicate:predicate];
NSSortDescriptor *sortDescriptor = [[NSSortDescriptor alloc] initWithKey:@"categoryID" ascending:NO];
NSSortDescriptor *sortDescriptor2 = [[NSSortDescriptor alloc] initWithKey:@"descriptionString" ascending:NO];
NSArray *sortDescriptors = [[NSArray alloc] initWithObjects:sortDescriptor, sortDescriptor2, nil];
[request setSortDescriptors:sortDescriptors];
[sortDescriptors release];
[sortDescriptor release];
[sortDescriptor2 release];
if (self=[[OfferFetchResults alloc]
initWithFetchRequest:request
managedObjectContext:[CoreDataHandler context]
sectionNameKeyPath:@"categoryID"
cacheName:nil])
{
self.delegate = self;
}
[request release];
[self performFetch:nil];
我不擅长制定复杂的NSPredicates。我希望有人会帮助我,因为NSPredicate编程指南不会帮助我。
答案 0 :(得分:0)
解决了......我放弃了尝试准备NSPredicate。我简单地更改了DB模型删除实体OfferMatch,然后直接添加了与主要实体相关的适当关系。