Tôi đọc nhiều về Dữ liệu lõi .. nhưng cách hiệu quả để tính số thực thể (như SQL có thể thực hiện với số lượng SELECT (1) ...). Bây giờ tôi chỉ giải quyết nhiệm vụ này với việc chọn tất cả với NSFetchedResultsController
và nhận được số lượng NSArray
! Tôi chắc chắn đây không phải là cách tốt nhất ...Cách thức hiệu quả của dữ liệu lõi cacao để đếm các thực thể
Trả lời
Tôi không biết liệu sử dụng NSFetchedResultsController là cách hiệu quả nhất để đạt được mục tiêu của bạn (nhưng có thể). Mã rõ ràng để nhận được tổng số các thể hiện thực thể là dưới đây:
// assuming NSManagedObjectContext *moc
NSFetchRequest *request = [[NSFetchRequest alloc] init];
[request setEntity:[NSEntityDescription entityForName:entityName inManagedObjectContext:moc]];
[request setIncludesSubentities:NO]; //Omit subentities. Default is YES (i.e. include subentities)
NSError *err;
NSUInteger count = [moc countForFetchRequest:request error:&err];
if(count == NSNotFound) {
//Handle error
}
[request release];
Để rõ ràng, bạn không tính các thực thể, nhưng các trường hợp của một thực thể cụ thể. (Để đếm các thực thể theo nghĩa đen, hãy hỏi mô hình đối tượng được quản lý để đếm số thực thể của nó.)
Để đếm tất cả các cá thể của một thực thể cụ thể mà không tìm nạp tất cả dữ liệu, sử dụng -countForFetchRequest:
.
Ví dụ:
NSFetchRequest *request = [[NSFetchRequest alloc] init];
[request setEntity: [NSEntityDescription entityForName: entityName inManagedObjectContext: context]];
NSError *error = nil;
NSUInteger count = [context countForFetchRequest: request error: &error];
[request release];
return count;
tôi sẽ chỉ thêm rằng để làm cho nó thậm chí còn hiệu quả hơn ... và bởi vì nó chỉ là một số, bạn không thực sự cần bất kỳ giá trị tài sản và chắc chắn thích một trong các ví dụ mã ở trên bạn cũng không cần các thực thể con.
Vì vậy, mã nên được như thế này:
int entityCount = 0;
NSEntityDescription *entity = [NSEntityDescription entityForName:@"YourEntity" inManagedObjectContext:_managedObjectContext];
NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init];
[fetchRequest setEntity:entity];
[fetchRequest setIncludesPropertyValues:NO];
[fetchRequest setIncludesSubentities:NO];
NSError *error = nil;
NSUInteger count = [_managedObjectContext countForFetchRequest: fetchRequest error: &error];
if(error == nil){
entityCount = count;
}
Hy vọng nó giúp.
Tôi tin rằng cách dễ nhất và hiệu quả nhất để đếm đối tượng là đặt NSFetchRequest
loại kết quả thành NSCountResultType
và thực hiện phương thức với phương thức NSManagedObjectContext countForFetchRequest:error:
.
NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] initWithEntityName:entityName];
fetchRequest.resultType = NSCountResultType;
NSError *fetchError = nil;
NSUInteger itemsCount = [managedObjectContext countForFetchRequest:fetchRequest error:&fetchError];
if (itemsCount == NSNotFound) {
NSLog(@"Fetch error: %@", fetchError);
}
// use itemsCount
Swift
Nó là khá dễ dàng để có được một số của tổng số các trường hợp của một thực thể trong Core Data:
let context = (UIApplication.sharedApplication().delegate as! AppDelegate).managedObjectContext
let fetchRequest = NSFetchRequest(entityName: "MyEntity")
let count = context.countForFetchRequest(fetchRequest, error: nil)
Tôi đã thử nghiệm này trong mô phỏng với một 400,000+ số lượng đối tượng và kết quả khá nhanh (mặc dù không phải tức thời).
Nếu bạn muốn tìm đếm cho cụ thể xác lấy, tôi tin rằng đây là cách tốt nhất:
NSError *err;
NSUInteger count = [context countForFetchRequest:fetch error:&err];
if(count > 0) {
NSLog(@"EXIST");
} else {
NSLog(@"NOT exist");
}
Tôi đã viết một phương pháp hữu ích đơn giản cho Swift 3 để lấy số lượng của các đối tượng.
static func fetchCountFor(entityName: String, predicate: NSPredicate, onMoc moc: NSManagedObjectContext) -> Int {
var count: Int = 0
moc.performAndWait {
let fetchRequest: NSFetchRequest<NSFetchRequestResult> = NSFetchRequest(entityName: entityName)
fetchRequest.predicate = predicate
fetchRequest.resultType = NSFetchRequestResultType.countResultType
do {
count = try moc.count(for: fetchRequest)
} catch {
//Assert or handle exception gracefully
}
}
return count
}
Trong Swift 3
static func getProductCount() -> Int {
let moc = (UIApplication.sharedApplication().delegate as! AppDelegate).managedObjectContext
let fetchRequest = NSFetchRequest<NSFetchRequestResult>(entityName: "Product")
let count = try! moc.count(for: fetchRequest)
return count
}
- 1. Dữ liệu cốt lõi: Lấy tất cả các thực thể
- 2. Cách hiệu quả của bộ nhớ để chèn một mảng các đối tượng với Dữ liệu lõi
- 3. Hiệu suất RestKit và dữ liệu lõi
- 4. Hiệu quả 2D FFT trên dữ liệu đầu vào thực?
- 5. Tên thực thể danh sách dữ liệu cốt lõi
- 6. Cách cập nhật danh sách các thực thể hiệu quả
- 7. Cách cải thiện hiệu suất nhập dữ liệu lớn với dữ liệu cốt lõi trong ios
- 8. Cách hiệu quả để kết hợp hai Cửa hàng liên tục dữ liệu lõi iOS là gì?
- 9. Mẫu dữ liệu cốt lõi: cách cập nhật hiệu quả thông tin cục bộ với các thay đổi từ mạng?
- 10. Cách hiệu quả hơn để đếm giao lộ?
- 11. Sắp xếp NSSets của thực thể dữ liệu cốt lõi - Mục tiêu-c
- 12. Cách thêm các thuộc tính khác vào thực thể dữ liệu lõi hiện tại?
- 13. Làm cách nào để tôi có thể thực hiện tìm kiếm phạm vi hiệu quả + đếm với dữ liệu vĩ độ/kinh độ?
- 14. Hiệu suất Dữ liệu Chính với Thực thể Đơn lẻ
- 15. Làm thế nào để bạn đếm số lượng thẻ dữ liệu rất lớn một cách hiệu quả bằng Python?
- 16. Lấy thực thể dữ liệu cốt lõi từ một thực thể cha mẹ
- 17. Có cách nào để gỡ lỗi hiệu quả các ràng buộc dữ liệu WPF không?
- 18. Cơ sở dữ liệu đồ thị có thể phân phối dữ liệu hiệu quả trên các nút không?
- 19. Cấu trúc dữ liệu hiệu quả để chèn
- 20. Cách hiệu quả để truy cập các tập dữ liệu lớn để hiển thị trên Leaflet
- 21. Dữ liệu lõi UITableView sắp xếp lại
- 22. Các thực thể lõi dữ liệu lồng nhau được lưu trữ đã tải xuống NSObjectInaccessibleException
- 23. Cách hiệu quả nhất để lưu dữ liệu lát của trò chơi isometric
- 24. Di chuyển dữ liệu lõi: Cách xóa ngăn xếp Dữ liệu cốt lõi?
- 25. Cách hiệu quả để tính phần trăm tương tự giữa các tập dữ liệu
- 26. Thực thi truy vấn SQL theo lô hiệu quả trên Android, để nâng cấp cơ sở dữ liệu
- 27. Di chuyển một cách hiệu quả các tập dữ liệu lớn giữa các bảng SQL Server?
- 28. Các kỹ thuật để thực hiện -hash trên các đối tượng Cacao có thể thay đổi
- 29. Cách đếm hiệu quả các hàng liên quan trong một mô hình bằng Doctrine2
- 30. Google AppEngine: cách đếm các mục nhập của cơ sở dữ liệu vượt quá 1000?
On Leopard bạn muốn sử dụng countForFetchRequest: và không executeFetchRequest: – IlDan
Có! Cảm ơn bạn. Tôi sẽ cập nhật mã. –
Và bỏ qua để đặt biến vị ngữ. Không có biến vị ngữ: nhận tất cả các đối tượng khớp với mô tả thực thể – IlDan