4

Core Data にオブジェクトの大きなリストがあります (約 50,000 で、定期的に増加しています)。次のリクエストで取得します。

NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] initWithEntityName:[SongObject name]];
fetchRequest.sortDescriptors = @[[NSSortDescriptor sortDescriptorWithKey:@"name" ascending:YES]];
fetchRequest.propertiesToFetch = @[@"uid", @"name", @"toArtistRef.uid", @"toArtistRef.name"];
fetchRequest.resultType = NSDictionaryResultType;

また、エンティティ SongObject にtoSongsInPlaylistRefは、対多である relationship が含まれています。

オブジェクトごとにこのセットの数を取得する必要があります。大量のデータのため、関係自体を取得できません。追加しよう @"toSongsInPlaylistRef.@count"とし@"toSongsInPlaylistRef.count" ましたが、クラッシュします

Terminating app due to uncaught exception 'NSInvalidArgumentException', 
reason: 'Invalid to many relationship in setPropertiesToFetch: (toSongsInPlaylistRef.count)'

提案があれば書いてください。

4

2 に答える 2

6

関連オブジェクトの数を取得するには、 を作成し、NSExpressionDescription それを に含める必要がありますpropertiesToFetch

NSExpression *countExpression = [NSExpression expressionForFunction:@"count:"
        arguments:@[[NSExpression expressionForKeyPath:@"toSongsInPlaylistRef"]]];
NSExpressionDescription *expressionDescription = [[NSExpressionDescription alloc] init];
[expressionDescription setName:@"playListCount"]; // Choose an appropriate name here!
[expressionDescription setExpression:countExpression];
[expressionDescription setExpressionResultType:NSInteger32AttributeType];

fetchRequest.propertiesToFetch = @[expressionDescription, ...];
于 2013-10-05T20:36:44.543 に答える
1

すべての曲を取得するのではなく、そのカウント数を取得する場合は、新しいプロパティ count を追加する必要があります。これは、新しい曲を追加すると増加します。

于 2013-10-03T14:35:59.087 に答える