我正在嘗試獲取所有對象上屬性的唯一值列表(類似於[array valueForKeyPath:@"@distinctUnionOfObjects.key"]
。從我所知道的情況來看,我應該能夠通過創建與resultType
的NSFetchRequest
設置爲NSDictionaryResultType
,指定propertiesToFetch
和設置returnsDistinctResults
到YES
。這樣做似乎沒有工作。NSFetchRequest「returnsDistinctResults」似乎被忽略
我已經創建了一個實體,稱爲Person
與三個屬性firstName
,lastName
和age
。下面是代碼我試圖用以下方式測試:
NSManagedObjectModel *objectModel = [NSManagedObjectModel mergedModelFromBundles:nil];
NSPersistentStoreCoordinator *coordinator = [[NSPersistentStoreCoordinator alloc] initWithManagedObjectModel:objectModel];
[coordinator addPersistentStoreWithType:NSInMemoryStoreType configuration:nil URL:nil options:nil error:nil];
NSManagedObjectContext *context = [[NSManagedObjectContext alloc] initWithConcurrencyType:NSMainQueueConcurrencyType];
context.persistentStoreCoordinator = coordinator;
[context performBlockAndWait:^{
NSArray *lastNames = @[@"Smith",@"Johnson"];
NSArray *firstNames = @[@"John", @"Susan"];
for (NSString *lastName in lastNames) {
for (NSString *firstName in firstNames) {
Person *person = [NSEntityDescription insertNewObjectForEntityForName:@"Person" inManagedObjectContext:context];
person.firstName = firstName;
person.lastName = lastName;
person.age = @(18);
}
}
}];
[context save:nil];
NSFetchRequest *fetchRequest = [NSFetchRequest fetchRequestWithEntityName:@"Person"];
fetchRequest.resultType = NSDictionaryResultType;
fetchRequest.propertiesToFetch = @[@"age"];
fetchRequest.returnsDistinctResults = YES;
NSArray *results = [context executeFetchRequest:fetchRequest error:nil];
NSLog(@"%@",results.description);
當我運行此,這是日誌我得到:
2017-10-12 16:17:54.723 TestCoreData[10650:879197] (
{
age = 18;
},
{
age = 18;
},
{
age = 18;
},
{
age = 18;
}
)
更改propertiesToFetch
到@[@"lastName"]
給出了相似的結果:
2017-10-12 16:32:45.143 TestCoreData[10800:929908] (
{
lastName = Smith;
},
{
lastName = Johnson;
},
{
lastName = Johnson;
},
{
lastName = Smith;
}
)
我的預期是,這些只會返回一個單個輸入爲age
,兩個爲lastName
。
我誤解了使用 的returnsDistinctResults
或使用不正確?
我只是想知道它是否是使用內存存儲的結果。您是否嘗試過使用SQL存儲類型? – pbasdf
@pbasdf是的,我發佈這個並試了一下後,我在想同樣的事情,這似乎是問題所在。感謝您的意見。 –