Sử dụng dữ liệu lõi, tôi gặp phải sự cố. Tôi có một thực thể "Phong trào" với một thuộc tính "số tiền". Làm cách nào để tổng hợp tất cả "số tiền" của tất cả các trường hợp? Tôi muốn hiểu làm thế nào để sử dụng NSExpressionDescription, nhưng nó đủ tốt NSSet.Tổng dữ liệu cốt lõi của tất cả các thuộc tính của trường hợp
Trả lời
Có managedObjectContext:
NSManagedObjectContext *managedObjectContext = ...
Chúng tôi tạo ra một yêu cầu lấy với từ điển kiểu trả về:
NSFetchRequest *fetchRequest = [NSFetchRequest fetchRequestWithEntityName:NSStringFromClass([Movement class])];
fetchRequest.resultType = NSDictionaryResultType;
Sau đó, chúng tôi tạo ra một mô tả biểu thức để tính toán số tiền:
NSExpressionDescription *expressionDescription = [[NSExpressionDescription alloc] init];
expressionDescription.name = @"sumOfAmounts";
expressionDescription.expression = [NSExpression expressionForKeyPath:@"@sum.amount"];
expressionDescription.expressionResultType = NSDecimalAttributeType;
Đặt thuộc tính yêu cầu để tìm nạp:
fetchRequest.propertiesToFetch = @[expressionDescription];
Chúng tôi cũng có thể đặt vị từ nếu muốn.
Và cuối cùng chúng tôi thực hiện yêu cầu và nhận một mảng chứa từ điển có một khóa (@ "sumOfAmounts") và giá trị của nó là một số NSNumber với tổng số tiền.
NSError *error = nil;
NSArray *result = [managedObjectContext executeFetchRequest:fetchRequest error:&error];
if (result == nil)
{
NSLog(@"Error: %@", error);
}
else
{
NSNumber *sumOfAmounts = [[result objectAtIndex:0] objectForKey:@"sumOfAmounts"];
}
Cheers
Cách tốt nhất là sử dụng một fetch for specific values và cung cấp một NSExpressionDescription with a sum:
function.
Khi bạn thực hiện lấy bạn nhận được một mảng một yếu tố có chứa một từ điển có các khóa khớp các mô tả biểu hiện và có giá trị là kết quả của biểu thức. Trong trường hợp này, bạn sẽ nhận được một khóa sum
có giá trị sẽ là tổng của các thuộc tính cho biểu thức.
Dưới đây là một Swift ví dụ về cách tổng hợp thuộc tính một đối tượng được quản lý sử dụng NSExpression
và NSExpressionDescription
. Ví dụ giả định rằng đối tượng được quản lý có tên là Movement
và thuộc tính tổng là amount
.
Ví dụ:
func sumAmount -> Double {
var amountTotal : Double = 0
// Step 1:
// - Create the summing expression on the amount attribute.
// - Name the expression result as 'amountTotal'.
// - Assign the expression result data type as a Double.
let expression = NSExpressionDescription()
expression.expression = NSExpression(forFunction: "sum:", arguments:[NSExpression(forKeyPath: "amount")])
expression.name = "amountTotal";
expression.expressionResultType = NSAttributeType.DoubleAttributeType
// Step 2:
// - Create the fetch request for the Movement entity.
// - Indicate that the fetched properties are those that were
// described in `expression`.
// - Indicate that the result type is a dictionary.
let fetchRequest = NSFetchRequest(entityName: "Movement")
fetchRequest.propertiesToFetch = [expression]
fetchRequest.resultType = NSAttributeType.DictionaryResultType
// Step 3:
// - Execute the fetch request which returns an array.
// - There will only be one result. Get the first array
// element and assign to 'resultMap'.
// - The summed amount value is in the dictionary as
// 'amountTotal'. This will be summed value.
do {
let results = try context.executeFetchRequest(fetchRequest)
let resultMap = results[0] as! [String:Double]
amountTotal = resultMap["amountTotal"]!
} catch let error as NSError {
NSLog("Error when summing amounts: \(error.localizedDescription)")
}
return amountTotal
}
bổ sung Thảo luận về bước:
Bước 1 - Tạo một biến NSExpressionDescription
. Điều này NSExpressionDescription
cho biết loại chức năng được áp dụng cho các đối số. Hàm tổng hợp đang được áp dụng cho thuộc tính số tiền.
expression.expression = NSExpression(forFunction: "sum:",
arguments:[NSExpression(forKeyPath: "amount")])
Chú ý rằng luận tham số là một mảng . Bạn có thể vượt qua các loại biểu thức khác nhau trong mảng, nhưng trong trường hợp của chúng tôi, chúng tôi chỉ muốn thuộc tính amount
.
Bước 2 - Yêu cầu tìm nạp được thiết lập tại đây. Lưu ý rằng loại kết quả được chỉ định làm từ điển: fetchRequest.resultType = NSAttributeType.DictionaryResultType
. Trong Bước 3, chúng tôi sẽ sử dụng giá trị expression.name
của amountTotal
làm khóa để truy cập giá trị tổng hợp.
Bước 3 - Chúng tôi thực hiện yêu cầu tìm nạp và được trả lại sẽ là một mảng phần tử. Phần tử sẽ là từ điển mà chúng tôi xếp vào [String:Double]
: let resultMap = results[0] as! [String:Double]
. Giá trị của từ điển là Double vì trong Bước 1, chúng tôi chỉ ra rằng expression.expressionResultType
sẽ là Double.
Cuối cùng, chúng tôi truy cập bằng cách gọi tổng giá trị điển kết hợp với phím amountTotal
: resultMap["amountTotal"]!
Tài liệu tham khảo:
- 1. Dữ liệu cốt lõi: Lấy tất cả các thực thể
- 2. Danh sách các loại thuộc tính Dữ liệu cốt lõi?
- 3. Dữ liệu cốt lõi - Lặp lại thông qua các thuộc tính của một NSManagedObject
- 4. Mối quan hệ kho dữ liệu cốt lõi với các thuộc tính được tìm nạp
- 5. Dữ liệu cốt lõi - sử dụng các thuộc tính tạm thời trong nhóm theo
- 6. Dữ liệu cốt lõi: xóa tất cả các đối tượng thuộc loại thực thể, nghĩa là xóa bảng
- 7. iPhone: Dữ liệu cốt lõi, Cách lấy tổng giá trị từ db
- 8. Dữ liệu cốt lõi tùy chỉnh SectionNameKeyPath
- 9. Xem nội dung của Dữ liệu cốt lõi
- 10. Tính giá trị lớn nhất cho thuộc tính dữ liệu cốt lõi - Lỗi NSCFNumber
- 11. Dữ liệu cốt lõi không lưu thay đổi đối với thuộc tính có thể biến đổi
- 12. NSCoding VS Dữ liệu cốt lõi
- 13. Thay đổi thuộc tính Dữ liệu cốt lõi thành nil (ARC có liên quan?)
- 14. Di chuyển dữ liệu lõi: Cách xóa ngăn xếp Dữ liệu cốt lõi?
- 15. Dữ liệu cốt lõi và NSOperation
- 16. Dữ liệu cốt lõi, NSPredicate và nhiều khóa
- 17. OCMock với vấn đề thuộc tính động Dữ liệu cốt lõi
- 18. Nhận tổng số của tất cả các kích thước cơ sở dữ liệu trong SQL Server
- 19. Cách nhanh chóng để tổng hợp một thuộc tính của tất cả các đối tượng trong một NSSet?
- 20. Dữ liệu cốt lõi và thiết lập BOOL
- 21. Ghi lại các thuộc tính thực thể Dữ liệu cốt lõi với các mục nhập Thông tin người dùng
- 22. Angularjs: Tìm tất cả các trường hợp của chỉ thị
- 23. dữ liệu cốt lõi - id khóa chính của một hàng trong cơ sở dữ liệu
- 24. Tìm kiếm dữ liệu cốt lõi cho tất cả các đối tượng có mối quan hệ "to-many" rỗng
- 25. Sắp xếp NSSets của thực thể dữ liệu cốt lõi - Mục tiêu-c
- 26. Dữ liệu cốt lõi, cách lấy ObjectId của NSManagedObject khi NSFetchRequest trả về NSDictionaryResultType?
- 27. Cách liệt kê tất cả các thuộc tính của lớp
- 28. Dữ liệu cốt lõi: UITableView với nhiều NSFetchedResultControllers
- 29. Tên thực thể danh sách dữ liệu cốt lõi
- 30. Làm cách nào để sử dụng dữ liệu lõi của thuộc tính Integer 64?
Tại sao downvote? – e1985
Xin lỗi, đây là điều xấu của tôi, tôi muốn upvote ... Plz cung cấp một chút chỉnh sửa trên bài viết của bạn để tôi có thể chuyển phiếu bầu của tôi – Yaman
cảm ơn người đàn ông! hoạt động tốt! – Vins