次の属性/列で構成される Core Data ベースの時系列 (エンティティ/テーブル) を使用しています。
dateTime mc nd re
数式に基づいて、result = (mc + nd) / re
各行の結果を計算し、結果 (dateTime + 値) を配列で返したいと思います。
データベース レベルで計算を実行するために次のコードを試しましたが、結果配列で間違った結果が得られました (行ごとに複数の dateTime 値、間違った計算結果)。ただし、NSExpressionDescription
NSLogging を行うと、正しい式が返されます。
私のコードの何が問題なのか、何か考えはありますか?
NSString *divisorKeyPath = @"revenue"
NSExpression *marketCapExpression = [NSExpression expressionForKeyPath:@"mc"];
NSExpression *netDebtExpression = [NSExpression expressionForKeyPath:@"nd"];
NSExpression *divisorExpression = [NSExpression expressionForKeyPath:
divisorKeyPath];
NSExpression *evExpression = [NSExpression expressionForFunction:
@"add:to:"
arguments:@[marketCapExpression,netDebtExpression]];
NSExpression *divisionExpression = [NSExpression expressionForFunction:
@"divide:by:"
arguments:@[evExpression, divisorExpression]];
NSString *divisionExpressionName = @"division";
NSExpressionDescription *divisionDescription = [[NSExpressionDescription alloc] init];
divisionDescription.name = divisionExpressionName;
divisionDescription.expression = divisionExpression;
divisionDescription.expressionResultType = NSDoubleAttributeType;
NSFetchRequest *divisionRequest = [NSFetchRequest fetchRequestWithEntityName:
NSStringFromClass([SharePrice class])];
divisionRequest.propertiesToFetch = @[@"dateTime",divisionDescription];
divisionRequest.resultType = NSDictionaryResultType;
NSSortDescriptor *sortDescriptor = [NSSortDescriptor
sortDescriptorWithKey:@"dateTime" ascending:YES];
divisionRequest.sortDescriptors = @[sortDescriptor];
NSError *error;
NSArray *divisionResults = [self.managedDocument.managedObjectContext
executeFetchRequest:divisionRequest error:&error];
NSLog(@"results: %@",divisionResults);