2013-12-09 74 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"]; 
相關問題