0

エンティティ "DIcome" にクエリを実行して属性 "credit" を合計したいのですが、今日と等しい "daystamp" 属性を持つ全体のみが必要です。次のコードは私を近づけますが、クレジットの合計 DIncome 属性をビュー コントローラーのラベルに出力するためにこのコードを終了する方法がわかりません。

これが私が得たものです。

//Get today date
NSDate *dateSelect = [NSDate date];

//formate today date as day only "dd"
NSDateFormatter *dfdd = [[NSDateFormatter alloc]init];
[dfdd setDateFormat:@"dd"];
NSString *formattedDatedd = [dfdd stringFromDate:dateSelect];

//Fetchrequest
NSFetchRequest *request = [[NSFetchRequest alloc] init];

NSEntityDescription *entity = [NSEntityDescription entityForName:@"DIncome" inManagedObjectContext:context];
[request setEntity:entity];

// Specify that the request should return dictionaries.
[request setResultType:NSDictionaryResultType];

// Create an expression for the key path.
NSExpression *keyPathExpression = [NSExpression expressionForKeyPath:@"credit"];

NSExpression *sumExpression = [NSExpression expressionForFunction:@"sum:" arguments:[NSArray arrayWithObject:keyPathExpression]];

// Create an expression description using the minExpression and returning a date.
NSExpressionDescription *expressionDescription = [[NSExpressionDescription alloc] init];

// The name is the key that will be used in the dictionary for the return value.
[expressionDescription setName:@"sumCredit"];
[expressionDescription setExpression:sumExpression];
[expressionDescription setExpressionResultType:NSDateAttributeType];

// Set the request's properties to fetch just the property represented by the expressions.
[request setPropertiesToFetch:[NSArray arrayWithObject:expressionDescription]];

// Execute the fetch.
NSError *error = nil;
NSArray *objects = [context executeFetchRequest:request error:&error];
if (objects == nil) {
    // Handle the error.
}
else {
    if ([objects count] > 0) {
        NSLog(@"Credit Sum: %@", [[objects objectAtIndex:0] valueForKey:@"sumCredit"]);
        self.dayDisplayLabel.text = sumExpression;
    }
}

質問の 2 番目の部分では、クレジットの合計を dayDisplayLabel に設定する必要があります。NSString を NSExpression に割り当てる互換性のないポインタであるため、これは機能しません。

self.dayDisplayLabel.text = sumExpression;

これを正しくするにはどうすればよいですか?

4

3 に答える 3

0

[request setResultType:NSDictionaryResultType]withを使用しpropertiesToFetchて、管理対象オブジェクトの特定の属性のみを取得できます。記録されるレコードを制限したい場合は、NSPredicate を使用できます (SQL ステートメントの WHERE 句のように機能します)。

于 2013-10-16T23:25:48.870 に答える
0

フェッチ要求は、結果を管理対象オブジェクトの配列として返します。これらのオブジェクトから属性値を取得できます。あなたの場合、DIncomeエンティティ タイプを表す管理対象オブジェクトの配列を取得します。サブクラス化した場合NSManagedObject、これらはサブクラスのインスタンスです。サブクラス化していない場合、それらは のインスタンスですNSManagedObject

これらのインスタンスから文字列属性の値を取得するには、キーと値のコーディングを使用します。属性の名前が「title」の場合、最初のオブジェクトの文字列値は次のように取得されます。

NSString *firstTitle = [mutableFetchResults[0] valueForKey:@"title"];

同様のコードを使用して、他の属性の値を取得します。

フェッチ リクエストに のインスタンスのサブセットのみを含めたい場合はDIncome、 を調べてNSPredicateください。これを SQL の "WHERE" 句のように使用して、特定の基準に一致するインスタンスのみを要求できます。

NSPredicate *predicate = [NSPredicate predicateWithFormat:@"name = %@", someNameString];
[request setPredicate:predicate];
于 2013-10-16T23:34:25.560 に答える