2017-10-12 4 views
1

私のすべてのオブジェクトのプロパティの一意の値のリストを取得しようとしています([array valueForKeyPath:@"@distinctUnionOfObjects.key"]と似ていますが、私はそれを作成することでこれを達成できるはずですNSDictionaryResultTypeからresultTypeセット、propertiesToFetchを指定しYESからreturnsDistinctResultsを設定する。これが機能していないよう行うとNSFetchRequestNSFetchRequest "returnsDistinctResults"は無視されているようです

私はエンティティを作成しているが、3つの属性firstNamelastNameagePersonと呼ばれる。ここでは、コードがあります私はこれをテストしようとしています:

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); 

私はこれを実行すると、これは私が手ログです:@[@"lastName"]propertiesToFetchを変更

2017-10-12 16:17:54.723 TestCoreData[10650:879197] (
     { 
     age = 18; 
    }, 
     { 
     age = 18; 
    }, 
     { 
     age = 18; 
    }, 
     { 
     age = 18; 
    } 
) 

でも同様の結果が得られます。

2017-10-12 16:32:45.143 TestCoreData[10800:929908] (
     { 
     lastName = Smith; 
    }, 
     { 
     lastName = Johnson; 
    }, 
     { 
     lastName = Johnson; 
    }, 
     { 
     lastName = Smith; 
    } 
) 

私の予想では、これらだけ戻ってくるということでしょうageの単一エントリとlastNameの2つです。

returnsDistinctResultsを誤解していますか、または間違って使用していますか?

+0

メモリストアを使用した結果かどうかは疑問です。あなたはSQLストア型で試しましたか? – pbasdf

+0

@pbasdfええこれを投稿して試してみたのと同じことを考えていて、それが問題のようでした。入力いただきありがとうございます。 –

答えて

1

私はメモリストアを使用しているので、これが発生していることがわかります。私が代わりにSQLiteの店でこれをバックアップする場合は、予想通り、それはこれらの結果を与え、作品:

2017-10-12 17:21:48.546 TestCoreData[11767:1035544] (
     { 
     age = 18; 
    } 
) 

2017-10-12 17:23:52.632 TestCoreData[11803:1044179] (
     { 
     lastName = Johnson; 
    }, 
     { 
     lastName = Smith; 
    } 
) 

私の推測では、明確な機能は、クエリ文で発生したものだとということですメモリストア内のフェッチに対しては存在しません。

関連する問題