NSExpressions를 사용하여 코어 데이터에서 집계 정보를 가져 오는 방법을 배우려고 시도했습니다. 가져 오기가 올바르게 작동하지만 처리를 위해 결과 데이터를 구문 분석하는 데 문제가 있습니다. 나는 뭔가를 놓쳐 버릴 것임에 틀림 없지만 나는 그것이 무엇인지 알 수 없다. 일부 엔티티에 대한 속성의 합계를 가져 오는 중이며이 부분이 올바르게 있습니다. 그렇다면 결과에 대해 수학을하고 싶지만 원하는 결과를 얻지 못하고 있습니다.NSDecimalNumber가 NSDecimalNumbers가 NSExpression 코어 데이터 가져 오기에서 NSDictionary에 저장 될 때의 산술 문제
여기 여기에 지금은 더 로켓 과학자는 아니지만, $ 100 + $ 300- $ (25) = $ (375) 내 콘솔 로그
2013-08-23 23:56:35.775 NSExpressionCoreDataTestApp[5162:907] {
currentBalance = 100;
postedCredits = 300;
postedDebits = 25;
}
내 샘플 코드
[_mainContext save:nil];
NSMutableDictionary *accountBalances = [[NSMutableDictionary alloc] init];
NSFetchRequest* request = [[NSFetchRequest alloc] init];
request.entity = [NSEntityDescription entityForName:@"AccountTransaction"
inManagedObjectContext:_mainContext];
// build an expression to calculate the sum
NSExpressionDescription* totalOfTransactionsDescription = [[NSExpressionDescription alloc] init];
NSExpression *keyExpression = [NSExpression expressionForKeyPath:@"amount"];
NSExpression *theExpression = [NSExpression expressionForFunction:@"sum:"
arguments:@[keyExpression]];
[totalOfTransactionsDescription setName:@"totalOfTransactions"];
[totalOfTransactionsDescription setExpression:theExpression];
[totalOfTransactionsDescription setExpressionResultType:NSFloatAttributeType];
// we want the results in a dictionary
request.resultType = NSDictionaryResultType;
request.propertiesToFetch = @[totalOfTransactionsDescription];
NSArray* results;
NSDictionary* fetchResultsDictionary;
NSDecimalNumber *total;
// credits
request.predicate = [NSPredicate predicateWithFormat:@"isCredit == %@",[NSNumber numberWithBool:YES]];
results = [_mainContext executeFetchRequest:request error:nil];
fetchResultsDictionary = [results objectAtIndex:0];
total = [fetchResultsDictionary objectForKey:@"totalOfTransactions"];
[accountBalances setObject:total forKey:@"postedCredits"];
// debits
request.predicate = [NSPredicate predicateWithFormat:@"isCredit == %@",[NSNumber numberWithBool:NO]];
results = [_mainContext executeFetchRequest:request error:nil];
fetchResultsDictionary = [results objectAtIndex:0];
total = [fetchResultsDictionary objectForKey:@"totalOfTransactions"];
[accountBalances setObject:total forKey:@"postedDebits"];
// build an account balance
NSDecimalNumber *startingBalance = [NSDecimalNumber decimalNumberWithString:@"100.00"];
NSDecimalNumber *currentBalance = startingBalance;
// add deposits
currentBalance = [currentBalance decimalNumberByAdding:[accountBalances objectForKey:@"postedCredits"]];
// subtract debits
currentBalance = [currentBalance decimalNumberBySubtracting:[accountBalances objectForKey:@"postedDebits"]];
[accountBalances setObject:currentBalance forKey:@"currentBalance"];
NSLog(@"%@", accountBalances);
입니다. currentBalance는 항상 $ 100입니다. 또한 내 샘플 데이터를 기반으로 postedCredits & postedDebits는 맞지만 아무 것도 추가되거나 시작 초기 잔액에서 빼는 것 같습니다. 결과를 어딘가에 입력해야 할 필요가있을 것이라고 확신하지만 추가 또는 뺄셈이 일어나기 전에 반입 결과가 사전 &에 추가되기 전에 시도했습니다. 심지어 그들을 시도하기 전에 사전에서 그들을 당긴 후 [NSDecimalNumber NSDecimalNumberWithString :] 시도했다.
누군가가 올바른 방향으로 나를 가리킬 수 있다면, 나는 그것을 매우 감사 할 것입니다. 미리 감사드립니다 !!
문제를 재현 할 수 없습니다. 나는 그것을 테스트했다. (명시 적 숫자, 예를 들어'[accountBalances setObject : [NSDecimalNumber decimalNumberWithString : @ "300.00"] forKey : @ "postedCredits"];'최종 결과는'currentBalance = 375'이다. 코드를 단계적으로 수행하고 중간 결과를 확인하십시오. –
의견에 감사드립니다. 오늘 아침에 알아 냈습니다. – vichudson1