3

このラウンドに初めて投稿するので、すべてのルールを適切に守っていない場合はご容赦ください。

私は iPhone (OS 3.1) 用のアプリを作成しており、小数を追加できるコードを作成しようとしています。amount 属性を持つ SimpleItem という Core Data エンティティがあります。これが私が書いたテストケースです:

// 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 で実行してデバッグすると、フェッチ リクエストの実行時に例外が発生します。

ただし、集計関数を使用せずに keyPathExpression を評価するだけでも問題ありません。

参照ドキュメントにはまったく同じ例が示されているため、何が間違っているのか疑問に思っています。それとも、これは単なるバグでしょうか?

万歳、ハラルド

4

3 に答える 3

0

私は以前にこの問題を抱えていたと思います。IIRC、問題は、フェッチ結果タイプをに設定しNSDictionaryResultTypeたが、それをで受け取っていることですNSArrayNSManagedObjectResultType配列を返すフェッチ結果タイプを切り替えてみてください。ドキュメントのすべての例では、デフォルトを使用していますNSManagedObjectResultType

いずれの場合も、エラーメッセージは、NSDecimalオブジェクトに配列のcountメッセージが送信された結果として明らかに発生します。結果を。にトラップすることで、これを確認できますid。例えば:

id *genericObj = [self.context executeFetchRequest:request error:&error];  
NSLog("returned object=%@",genericObj);
NSLog("returned object class=%@",[genericObj class]);
于 2009-11-08T16:29:16.753 に答える
0

指定されたソースを新しい iPhone プロジェクトにコピーし、それをシミュレーターで実行すると、ここでは問題なく動作しました。Snow Leopard で 3.1.2 SDK に対してコンパイルしていました。

これは私がデータモデルに使用したものです:

モデルの説明 http://homepage.mac.com/aclark78/.Public/Pictures/test%20model.png

あなたの問題を引き起こしている何か他のことが起こっているに違いありません。モデルを説明したり、さらに単純化したりできますか?

于 2010-01-14T03:18:27.260 に答える