2011-09-23 31 views
16

Giả sử tôi có hai thực thể, nhân viên và bộ phận. Một bộ phận có mối quan hệ rất nhiều với nhân viên, nhiều nhân viên có thể ở trong mỗi bộ phận nhưng mỗi nhân viên chỉ thuộc về một bộ phận. Tôi muốn hiển thị tất cả các nhân viên trong một tableview được sắp xếp theo dữ liệu mà là một tài sản của bộ phận mà họ thuộc về sử dụng một NSFetchedResultsController. Vấn đề là tôi muốn bảng của tôi để cập nhật khi một đối tượng bộ phận nhận được thay đổi giống như nó nếu các thuộc tính thường xuyên của nhân viên thay đổi, nhưng FetchedResultsController dường như không theo dõi các đối tượng liên quan. Tôi đã nhận được thông qua vấn đề này một phần bằng cách thực hiện như sau:NSFetchedResultsController với mối quan hệ không cập nhật

for (Employee* employee in department.employees) { 
    [employee willChangeValueForKey:@"dept"]; 
} 

/* Make Changes to department object */ 

for (Employee* employee in department.employees) { 
    [employee didChangeValueForKey:@"dept"]; 
} 

Điều này rõ ràng là không lý tưởng nhưng nó gây ra nhân viên dựa trên phương thức đại biểu FRC didChangeObject để được gọi. Vấn đề thực sự tôi đã để lại hiện đang ở các đối tượng nhân viên sắp xếp một FRC được theo dõi:

NSEntityDescription *employee = [NSEntityDescription entityForName:@"Employee" inManagedObjectContext:self.managedObjectContext]; 
NSSortDescriptor *sortDescriptor = [[NSSortDescriptor alloc] initWithKey:@"department.someProperty" ascending:NO]; 

này hoạt động tuyệt vời và sắp xếp các nhân viên một cách chính xác lần đầu tiên nó được gọi là, vấn đề là khi tôi thay đổi một department someProperty nên thay đổi việc sắp xếp bảng nhân viên của tôi không có gì xảy ra. Có cách nào tốt đẹp để thay đổi theo dõi nhân viên FRC của tôi trong một mối quan hệ? Đặc biệt tôi chỉ cần một số cách để có nó cập nhật các phân loại khi sắp xếp được dựa trên một tài sản liên quan. Tôi đã xem xét một số câu hỏi tương tự nhưng không thể tìm thấy một giải pháp thỏa đáng.

Trả lời

16

NSFetchedResultsController thực sự chỉ được thiết kế để xem một thực thể tại một thời điểm. Thiết lập của bạn, trong khi nó có ý nghĩa, nó vượt xa những gì NSFetchedResultsController hiện có khả năng xem một mình.

Đề xuất của tôi sẽ là thiết lập trình theo dõi của riêng bạn. Bạn có thể căn cứ nó ra khỏi ZSContextWatcher tôi đã thiết lập trên GitHub hoặc bạn có thể làm cho nó thậm chí còn đơn giản hơn.

Về cơ bản bạn muốn xem NSManagedObjectContextDidSaveNotification bài đăng và sau đó tải lại bảng khi một đám cháy chứa thực thể bộ phận của bạn.

Tôi cũng khuyên bạn nên gửi rdar bằng Apple và yêu cầu cải thiện NSFetchedResultsController.

+0

Không chắc chắn bạn muốn thiết lập FRC để xem nhiều hơn một thực thể tại một thời điểm. Các hoán vị sẽ trở nên lớn và xấu xí trong một vội vàng. Bạn cũng có thể gặp vấn đề với tính tròn. – TechZen

+0

Tôi đã chạy qua các tình huống trong đó chế độ xem iPad cần xem nhiều hơn một thực thể để duy trì trạng thái. Đó là nơi mà ý tưởng đến từ ban đầu. –

+0

Tôi sẽ có lợi cho lớp phụ hoặc lớp phụ. Bạn càng thêm phức tạp vào lớp cơ sở, bạn càng phải quản lý và gỡ lỗi. – TechZen

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