2011-09-15 16 views
18

Tôi có yêu cầu tìm nạp được xác định trong mô hình dữ liệu cốt lõi của tôi được gọi là "RemainingGaneProjections". Tôi muốn thực hiện yêu cầu tìm nạp đó và sắp xếp kết quả theo một trong các thuộc tính của thực thể. Mã của tôi trông như thế này:Áp dụng bộ mô tả sắp xếp cho NSFetchRequest được tạo từ mẫu

NSFetchRequest *projectionsRequest = [model fetchRequestTemplateForName:@"RemainingGameProjections"]; 
NSSortDescriptor *sortDescriptor = [[NSSortDescriptor alloc] initWithKey:@"confidence" ascending:NO]; 
[projectionsRequest setSortDescriptors:[NSArray arrayWithObject:sortDescriptor]]; 

Khi tôi cố gắng để thực thi mã này nó bị treo với thông báo sau:

*** Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: 'Can't modify a named fetch request in an immutable model.' 

Tôi đã khẳng định trong debugger rằng vụ tai nạn này xảy ra khi tôi thực hiện phương pháp setSortDescriptors trên NSFetchRequest của tôi. Tôi đã không thể tìm ra lý do tại sao điều này xảy ra.

Bất kỳ giải thích nào về những gì đang xảy ra ở đây? Có cách tiếp cận nào khác tôi nên sử dụng khi truy xuất dữ liệu cần được sắp xếp không?

Trả lời

35

Tôi tự tìm thấy câu trả lời trong tài liệu của Apple về tất cả các địa điểm. Vì yêu cầu tìm nạp của tôi không có tham số thay thế, tôi đã sử dụng phương thức fetchRequestTemplateForName thay vì fetchRequestFromTemplateWithName. Khi nó quay ra, hướng dẫn lập trình Core Data nói điều này:

Nếu mẫu không có biến thay thế, bạn phải:

  1. Sử dụng fetchRequestFromTemplateWithName: substitutionVariables: và vượt qua nil như các biến tranh luận;
  2. Sử dụng hàm fetchRequestTemplateForName: và sao chép kết quả. Nếu bạn cố gắng sử dụng yêu cầu tìm nạp được trả lại bởi fetchRequestTemplateForName :, điều này tạo ra một ngoại lệ ("Không thể sửa đổi yêu cầu tìm nạp có tên trong mô hình không thay đổi").

tôi sửa đổi khởi tạo yêu cầu lấy tôi để làm điều này:

NSFetchRequest *projectionsRequest = [[model fetchRequestTemplateForName:@"RemainingGameProjections"] copy]; 

và bây giờ mọi thứ hoạt động như mong đợi.

+0

Và tôi giả sử bạn cũng đã thêm một 'bản phát hành' tương ứng cho' projectionsRequest'. –

+12

Không - Tôi đang sử dụng ARC cho dự án này;) –

Các vấn đề liên quan