première fois que je poste à ce tour, alors s'il vous plaît garder avec moi si je ne suis pas toutes les règles correctement. Je suis en train d'écrire une application pour l'iPhone (OS 3.1) et j'essaie d'écrire du code qui me permet d'ajouter des décimales. J'ai une entité Core Data appelée SimpleItem avec un attribut amount. Voici le cas de test je l'ai écrit:Calcul de la somme pour les valeurs décimales via Core Data ne fonctionne pas correctement?
// Create and configure objects
SimpleItem *si1 = [self createSimpleItem:@"si1"];
si1.amount = [NSDecimalNumber decimalNumberWithMantissa:1000 exponent:0 isNegative:NO];
SimpleItem *si2 = [self createSimpleItem:@"s12"];
si2.amount = [NSDecimalNumber decimalNumberWithMantissa:2000 exponent:0 isNegative:NO];
// Need to save prior to fetching results with NSDictionaryResultType (known limitation)
[self save];
// Describe fetch request
NSFetchRequest *request = [[NSFetchRequest alloc] init];
NSEntityDescription *entityDescription = [NSEntityDescription entityForName:@"SimpleItem" inManagedObjectContext:self.context];
[request setEntity:entityDescription];
[request setResultType:NSDictionaryResultType];
NSExpression *keyPathExpression = [NSExpression expressionForKeyPath:@"amount"];
// For whatever reason, evaluating this expression here is absolutely not working. Probably decimals aren't handled properly.
NSExpression *sumAmountExpression = [NSExpression
expressionForFunction:@"max:"
arguments:[NSArray arrayWithObject:keyPathExpression]];
NSExpressionDescription *expressionDescription = [[NSExpressionDescription alloc] init];
[expressionDescription setName:@"amount"];
[expressionDescription setExpression:sumAmountExpression];
[expressionDescription setExpressionResultType:NSDecimalAttributeType];
[request setPropertiesToFetch:[NSArray arrayWithObject:expressionDescription]];
// Fetch the amounts
NSError *error = nil;
NSArray *array = [self.context executeFetchRequest:request error:&error];
Si j'exécute ce code par otest et le débogage, je reçois une exception lorsque la demande d'extraction est exécutée: « - [NSDecimalNumber compte]: sélecteur non reconnu envoyé à l'instance. " Cependant, l'évaluation de la fonction keyPathExpression sans la fonction d'agrégat fonctionne correctement.
Le reference documentation montre exactement le même exemple, donc je me demande ce que je fais mal. Ou cela pourrait-il être juste un bug?
Tous les meilleurs, Harald
J'ai rencontré cela aussi; pense que c'est un bug dans les données de base car cela fonctionne dans le magasin SQL, mais pas dans la mémoire. Je vais déposer ceci dans le radar quand j'ai une chance. –