2013-12-09 36 views
0

我想要使用我的NSFetchedResult请求不同的结果。我试图使用这里发布的答案:What class is returned when requesting distinct NSManagedObject property instances from Core-Data?使用NSMangedObjectID为了得到实际的NSManagedObject。这里是NSFetchedResult代码:NSManagedObjectID返回一个字符串,同时请求不同的NSManagedObject

//Unique fetch request 
    NSFetchRequest *uniqueFetchRequest = [NSFetchRequest fetchRequestWithEntityName:@"EntityName"]; 
    [uniqueFetchRequest setPropertiesToFetch:@[@"name"]]; 
    [uniqueFetchRequest setReturnsDistinctResults:YES]; 
    [uniqueFetchRequest setResultType:NSDictionaryResultType]; 
    [uniqueFetchRequest setPredicate:predicate]; 
    [uniqueFetchRequest setSortDescriptors:sortDescriptors]; 
    uniqueResults = [[NSArray alloc] initWithArray:[context executeFetchRequest:uniqueFetchRequest error:&error]]; 
    NSManagedObjectID *mid = uniqueResults[0][@"name"]; 
    EntityData *card = (EntityData *)[context objectWithID:mid]; 

然而,[uniqueResults[0][@"name"]返回一个的NSString它发现,而不是像0x8b7b120 <x-coredata://C7E53293-94C7-444D-8162-167B1D66A961/Hair/p33>的NSManagedObject的实际name(这是在我发布的链接返回)。因为它现在是一个NSString,[context objectWithID:mid]崩溃,并给我以下错误:[__NSCFString persistentStore]: unrecognized selector sent to instance 0xc47b170

我在做什么错在这里?

回答

0

你这里的错误是试图把你的nameNSString性质)作为关系。

您的请求将在词典中的数组返回所有不同name属性值(现有的EntityName实体)。

如果2个(或更多)对象可以具有相同的名称,那么您希望返回哪个对象ID?

如果您想根据属性值对数据进行分段,我建议您使用NSFetchedResultsController并指定sectionNameKeyPath:以符合您的需求。

编辑:
如果有不稳定结果你确定你可以尝试:

NSFetchRequest* r = [NSFetchRequest fetchRequestWithEntityName:@"Ingredient"]; 
r.resultType = NSDictionaryResultType; 
r.propertiesToGroupBy = @[@"name"]; 

NSExpressionDescription* objectIdDesc = [[NSExpressionDescription alloc] init]; 
objectIdDesc.name = @"objectID"; 
objectIdDesc.expression = [NSExpression expressionForEvaluatedObject]; 
objectIdDesc.expressionResultType = NSObjectIDAttributeType; 

r.propertiesToFetch = @[objectIdDesc,@"name"]; 

NSArray* res = [context executeFetchRequest:r error:nil]; 

但我看到没有使用这种取

+0

基本上,我的实体有两个属性:name和releaseDate。可能有多个具有相同名称的实体,但每个实体都有唯一的releaseDate。我试图执行只会为每个名称返回一个实体的提取。例如:我有“道奇霓虹灯” - “12/2010”和“道奇霓虹灯” - “2011年1月”。我希望我的抓取只返回其中的一个。 (我已经通过releaseDate属性对NSFetchRequest进行排序) – Nick

+0

@Nick查看我的编辑 –

+0

是什么让它变得不稳定?这种获取对于交换纸牌游戏非常有用。偶尔会重印相同的牌,因此当制作游戏的牌组建者时,能够仅显示每个重印牌的一个副本以便在搜索牌时不会出现10同一张卡的版本。 – Nick

0

看看的collection operators

NSFetchRequest *fetchRequest = [NSFetchRequest fetchRequestWithEntityName:@"EntityName"]; 
    [fetchRequest setPredicate:predicate]; 
    [fetchRequest setSortDescriptors:sortDescriptors]; 
    results = [context executeFetchRequest:fetchRequest error:&error]; 
    uniqueResults = [results valueForKeyPath:@"@distinctUnionOfObjects.name"]; 
相关问题