我第一次發佈到這一輪,所以如果我沒有正確遵守所有規則,請耐心等待。通過核心數據計算小數值的總和不正常?
我正在爲iPhone(OS 3.1)編寫一個應用程序,並試圖編寫一些代碼來讓我添加小數。我有一個名爲SimpleItem的Core Data實體和一個amount屬性。下面是測試情況下,我寫道:
// 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];
如果我執行這個代碼通過otest並調試它,執行讀取請求時,我得到一個異常:「 - [NSDecimalNumber計數]:無法識別的選擇發送到實例。 「
不過,只是在沒有聚合函數的情況下評估keyPathExpression效果不錯。
reference documentation顯示完全相同的例子,所以我想知道我做錯了什麼。或者這可能只是一個錯誤?
一切順利, 哈拉爾
我也遇到過這個;認爲這是Core Data中的一個錯誤,因爲它在SQL存儲中工作,但不在內存中。當我有機會的時候我會用雷達記錄這些信息。 – 2010-03-17 13:35:35