Tôi có một số NSFetchRequest
để trả lại các thuộc tính của đối tượng trong một số NSDictionaryResultType
. Có thể lấy ObjectId của đối tượng trong từ điển này không? Nếu không, tôi sẽ cần phải chạy truy vấn với kiểu trả về là NSManagedObjectResultType
, chậm hơn nhiều đối với một số lượng lớn các mục được trả về.Dữ liệu cốt lõi, cách lấy ObjectId của NSManagedObject khi NSFetchRequest trả về NSDictionaryResultType?
Trả lời
Có thể, bằng cách sử dụng lớp học NSExpressionDescription
rất tiện lợi nhưng không được ghi nhận. Bạn cần thêm đối tượng NSExpressionDescription
được định cấu hình đúng vào mảng của các đối tượng NSPropertyDescription
bạn đặt qua setPropertiesToFetch:
cho số NSFetchRequest
của mình.
Ví dụ:
NSExpressionDescription* objectIdDesc = [[NSExpressionDescription new] autorelease];
objectIdDesc.name = @"objectID";
objectIdDesc.expression = [NSExpression expressionForEvaluatedObject];
objectIdDesc.expressionResultType = NSObjectIDAttributeType;
myFetchRequest.propertiesToFetch = [NSArray arrayWithObjects:objectIdDesc, anotherPropertyDesc, yetAnotherPropertyDesc, nil];
NSArray* fetchResults = [myContext executeFetchRequest:myFetchRequest error:&fetchError];
Sau đó, bạn nên có một chìa khóa @"objectID"
trong các từ điển bạn trở lại từ yêu cầu lấy bạn.
Giải pháp duy nhất tôi đã tìm thấy cho đến nay đang thực hiện một giây lấy yêu cầu, đó là tương tự như ban đầu lấy yêu cầu trừ những khác biệt sau:
[fetchRequest setReturnsObjectsAsFaults:YES];
[fetchRequest setPropertiesToFetch:nil];
[fetchRequest setFetchLimit:1];
[fetchRequest setFetchOffset:index]; // The index for which the objectID is needed
[request setResultType:NSManagedObjectIDResultType];
này sẽ làm cho lấy yêu cầu phải trả lại một mảng với chính xác một đối tượng, đối tượng mong muốnID. Hiệu suất có vẻ tốt, ngay cả khi kết quả của yêu cầu tìm nạp ban đầu chứa 10.000 đối tượng.
Nếu có cách nào tốt hơn để xử lý việc này, tôi sẽ rất vui nếu ai đó có thể đăng chúng ở đây.
NSFetchRequest *request = [[NSFetchRequest alloc] init];
request.entity = [NSEntityDescription entityForName:@"yourEntity" inManagedObjectContext:context];
request.sortDescriptors = [NSArray arrayWithObjects:[NSSortDescriptor sortDescriptorWithKey:@"title" ascending:YES], nil];
request.predicate = nil;
request.fetchLimit = 20;
NSError *error = nil;
NSArray fetchedResults = [context executeFetchRequest:request error:&error];
NSLog(@"%@", [fetchedResults valueForKey:@"objectID"]);
Từ kết quả lấy bạn đã có trong một mảng tại sao không kéo chúng ra với valueForKey: @ "ObjectId"? Sạch sẽ, đơn giản chỉ cần một yêu cầu tìm nạp để bạn có thể kéo tất cả dữ liệu khác mà bạn cần.
Jason muốn kết quả ở định dạng từ điển, trong khi cách tiếp cận của bạn trả về một đối tượng được quản lý bị lỗi – unixo
câu trả lời Nick Hutchinson ở Swift:
let idDescription = NSExpressionDescription()
idDescription.name = "objectID"
idDescription.expression = NSExpression.expressionForEvaluatedObject()
idDescription.expressionResultType = .objectIDAttributeType
Tôi không thể bình luận về nó bởi vì tôi không có đủ diện :(
- 1. Dữ liệu chính NSFetchRequest setResultType: NSDictionaryResultType không hoạt động
- 2. Dữ liệu lõi trả về NSManagedObject thay vì lớp Bê tông, nhưng chỉ khi sử dụng. accessor
- 3. Dữ liệu cốt lõi - Lấy mẫu đơn giản JOIN
- 4. Dữ liệu cốt lõi tùy chỉnh SectionNameKeyPath
- 5. 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
- 6. Dữ liệu lõi NSFetchRequest trả về mảng chưa được phân loại sau khi xóa đối tượng và nạp lại dữ liệu
- 7. Dữ liệu cốt lõi: Lấy tất cả các thực thể
- 8. Dữ liệu cốt lõi không thống nhất - tìm nạp đôi khi không trả lại gì cả
- 9. Dữ liệu cốt lõi và NSOperation
- 10. NSCoding VS Dữ liệu cốt lõi
- 11. Xóa một đối tượng trong dữ liệu cốt lõi
- 12. Di chuyển dữ liệu lõi: Cách xóa ngăn xếp Dữ liệu cốt lõi?
- 13. Câu hỏi dữ liệu cốt lõi về cách sử dụng thông thường
- 14. Xem nội dung của Dữ liệu cốt lõi
- 15. Tìm nạp dữ liệu cốt lõi cực kỳ chậm
- 16. Tên thực thể danh sách dữ liệu cốt lõi
- 17. Dữ liệu cốt lõi có áp đặt giới hạn về độ dài của chuỗi không?
- 18. Làm cho dữ liệu cốt lõi an toàn chủ đề
- 19. Dữ liệu cốt lõi - Lưu trữ hình ảnh (iPhone)
- 20. iPhone: Dữ liệu cốt lõi, Cách lấy tổng giá trị từ db
- 21. 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
- 22. Lưu trữ NSArray trong mã mẫu dữ liệu cốt lõi?
- 23. So sánh ngày so sánh dữ liệu cốt lõi
- 24. Dữ liệu cốt lõi, NSPredicate, BẤT K key key.path == nil
- 25. Có cần phải đọc Dữ liệu cốt lõi trong performBlock khi sử dụng NSMainQueueConcurrencyType không?
- 26. Dữ liệu lõi NSFetchedResultsController - Tổng số bản ghi trả về
- 27. Lấy ID tối đa từ dữ liệu lõi & sqlite
- 28. Dữ liệu cốt lõi: UITableView với nhiều NSFetchedResultControllers
- 29. Mới vào Dữ liệu cốt lõi cho iphone
- 30. Mối quan hệ dữ liệu cốt lõi Lỗi
đẹp tìm Nick, và ghi lại ví dụ của bạn được rất nhiều đánh giá cao –
Đây là câu trả lời kỳ lạ của năm :) –