我有一個擁有標題標題和金額的實體。我想顯示我實體中每個標題的總價值。從核心數據中篩選標題
1
A
回答
0
您使用NSPredicate來篩選按類別的對象,然後就可以獲取某個屬性例如只值:
NSFetchRequest *request = [[NSFetchRequest alloc] init];
// Entity
NSEntityDescription *ent = [NSEntityDescription entityForName:@"Incoming" inManagedObjectContext:context];
[request setEntity:ent];
// Predicate
NSPredicate *pred = [NSPredicate predicateWithFormat:@"category MATCHES[cd] %@", @"FOOD"];
[request setPredicate:pred];
// Property fetch
[request setResultType:NSDictionaryResultType];
[request setReturnsDistinctResults:NO];
[request setPropertiesToFetch:@[@"Amount"]];
// Execute the fetch.
NSError *error;
NSArray *objects = [context executeFetchRequest:request error:&error];
int total = 0;
if (objects) {
for(NSDictionary *dict in objects) {
NSString *key = dict.allKeys.lastObject;
total += [dict[key] intValue];
}
} else {
NSLog(@"Fetch error: %@", error.localizedDescription);
}
NSLog(@"Total: %i", total);
0
下面將得到一個類別和金額讀取操作:
NSFetchRequest *fetchRequest = [NSFetchRequest fetchRequestWithEntityName:@"Incoming"];
fetchRequest.resultType = NSDictionaryResultType;
NSExpression *sumExp = [NSExpression expressionWithFormat:@"sum:(amount)"];
NSExpressionDescription *sumED = [[NSExpressionDescription alloc] init];
sumED.name = @"sum";
sumED.expression = sumExp;
sumED.expressionResultType = NSDoubleAttributeType;
fetchRequest.propertiesToFetch = [@"title", sumED];
fetchRequest.propertiesToGroupBy = [@"title"];
NSArray *dictionaries = [self.managedObjectContext executeFetchRequest:fetchRequest error:nil];
查看NSExpression
文檔here。
2
通過利用KVC(鍵值編碼),您幾乎可以免除提取請求。
首先獲取(或過濾器)與此斷言:
[NSPredicate predicateWithFormat:@"category = %@", @"Food"];
然後就總結得出一個結果行:
NSNumber *sum = [result valueForKeyPath:@"@sum.amount"];
沒有必要獲取使用NSDictionaryResultType
只有某些屬性 - 只需獲取正常的NSManagedObject
(核心數據將爲您優化)。
相關問題
- 1. 標籤欄iOS - 僅篩選核心數據
- 2. 目標C,核心數據的問題
- 3. 如何篩選包含核心數據的NSMutable數組?
- 4. 從核心數據
- 5. 從核心數據
- 6. 從核心數據調用座標
- 7. 核心數據關係:篩選和排序
- 8. NSPredicate按屬性篩選核心數據關係NSSet
- 9. 核心數據:基於NSDate的時間組件篩選條目
- 10. 核心數據問題
- 11. 核心數據問題 - EXC_BAD_ACCESS
- 12. 核心數據NSFetchedResultsControllerDelegate問題
- 13. 核心數據NSFetchRequest問題
- 14. 核心數據問題Swift
- 15. 核心數據問題
- 16. 核心數據和主題
- 17. 核心數據:「insertNewObjectForEntityForName」問題
- 18. iPhone核心數據問題
- 19. iPhone - 核心數據問題?
- 20. iPhone - 核心數據問題?
- 21. 核心數據問題
- 22. 核心數據 - NSFetchRequest問題
- 23. 選擇核心數據
- 24. 核心數據線標籤
- 25. 從DataTable中篩選數據
- 26. CIFourfoldRotatedTile核心圖像篩選器
- 27. 核心數據:從實體
- 28. 核心數據從父
- 29. 如何從核心數據
- 30. 從核心數據加載
我將如何返回到我最初稱爲這種方法?我收到的錯誤隱式轉換int到id在ARC中是不允許的 – John
我不太明白,但是你可以像' - (int)getTotal;' –
@pbasdf那樣定義int的返回類型,但答案確實很好。試試那個。 –