私はこの問題の答えをネットで検索しますが、残念ながら、実際にキーワードの適切な組み合わせを含めるのに十分なコアデータ手順に精通しているとは思いません。
私には2つのエンティティがあります...Users
そしてBookmarks
1対多の関係にあります。
Users
:string:firstName
、、-逆
との関係をstring:lastname
持つstring:iconImage
Bookmarks
Bookmarks
:string:title
、、、、string:url
とstring:content
の
関係でimage:Binary Data
-逆order:Integer32
Users
ここでの私の目標は、特定のユーザーのブックマークを照会し、key:orderの最大数を見つけることです。これにより、新しいブックマークを追加したときに、最大数より1つ大きくなります。私はAppleの例を見てきましたが、これは機能し、理にかなっていますが、もう少し必要です。この例では、そのエンティティ内のすべてのレコードの最大値が返されます。
-(NSNumber*) getNextBookmarksOrderForUser:(NSManagedObjectID*)userID
{
NSNumber *highOrder;
Users *user =[self getUserByID:userID];
if (user)
{
NSExpression *keyPathExpression = [NSExpression expressionForKeyPath:@"order"];
NSExpression *highestOrderingNumber = [NSExpression expressionForFunction:@"max:" arguments:[NSArray arrayWithObject:keyPathExpression]];
NSExpressionDescription *expressionDescription = [[NSExpressionDescription alloc]init];
[expressionDescription setName:@"maxOrdering"];
[expressionDescription setExpression:highestOrderingNumber];
[expressionDescription setExpressionResultType:NSDecimalAttributeType];
NSEntityDescription *entity = [NSEntityDescription entityForName:@"Bookmarks" inManagedObjectContext:[_dataContext managedObjectContext]];
NSFetchRequest *request = [[NSFetchRequest alloc]init];
[request setEntity:entity];
[request setPropertiesToFetch:[NSArray arrayWithObject:expressionDescription]];
[request setResultType:NSDictionaryResultType];
NSError *error = nil;
NSArray *objects = [[_dataContext managedObjectContext] executeFetchRequest:request error:&error];
if(objects == nil) {
// Handle the error
}
else {
if ([objects count] > 0) {
highOrder = [NSNumber numberWithInt:[[[objects objectAtIndex:0] valueForKey:@"maxOrdering"]intValue]];
NSLog(@"Highest ordering number: %@", highOrder);
}
}
return highOrder;
}
return nil;
}
したがって、2人のユーザーがいる場合(1つは10ブックマーク、もう1つは25)、上記のコードは常に25を返します。述語を追加してみました。
NSPredicate *byUser = [NSPredicate predicateWithFormat:@"self == %@", user];
[request setPredicate:byUser];
誰か提案はありますか?ユーザーのすべてのブックマークを返し、自分の値を見つけるためのコードを書くことができることは知っていますが、それを最も効率的な方法で行いたいと思います。
助けてくれてありがとう。