Tôi gặp vấn đề với chế độ xem bảng không cập nhật khi tôi lập trình thay đổi một số thuộc tính được quản lý hiện có. Tôi mong đợi NSFetchedResultsControllerDelegate
của tôi sẽ được gọi trong trường hợp này, nhưng không phải vậy.Dữ liệu cốt lõi: cập nhật đối tượng được quản lý không gọi NSFetchedResultsControllerDelegate
của Apple doc nói:
Một thể hiện của
NSFetchedResultsController
sử dụng các phương pháp trong giao thức này để thông báo cho đại biểu của mình rằng lấy kết quả của bộ điều khiển đã được thay đổi do một add, loại bỏ, di chuyển, hoặc cập nhật hoạt động.
Để biết thêm chi tiết, đối tượng được quản lý của tôi dưới dạng thuộc tính int được gọi là status
có giá trị từ enum
. Chế độ xem bảng của tôi chỉ hiển thị các đối tượng có số status
bằng upToDate
(một trong các giá trị của enum). Để làm như vậy, FetchedResultController tôi có một vị mà kiểm tra cho tình trạng đó:
predicate = [NSPredicate predicateWithFormat:@"doc.status == %d", upToDate];
Nó hoạt động tốt, nhưng bản cập nhật không được phản ánh khi tôi thay đổi một đối tượng out-of-date trở lại tình trạng upToDate
. Mã của tôi được sửa đổi từ mẫu của Apple.
Đây là những gì tôi đã cố gắng:
myObject.status = [NSNumber numberWithInt:upToDate];
[managedObjectContext save:nil];
[managedObjectContext processPendingChanges];
[myTableView reloadData];
Và cuối cùng, tôi quản lý để có cập nhật xem bảng của tôi với một lời kêu gọi:
[fetchedResultsController performFetch:&error];
[myTableView reloadData];
Nhưng thậm chí sau đó, không ai trong số NSFetchedResultsControllerDelegate
phương pháp của tôi có được được gọi là mâu thuẫn với tài liệu của Apple. Ngoài ra, không có hoạt ảnh mượt mà nào xảy ra.
Tôi mong đợi controllerWillChangeContent:
, controller:didChangeObject:atIndexPath:forChangeType:newIndexPath:
và controllerDidChangeContent:
để được gọi.
Tôi cho rằng tôi đã bỏ sót điều gì đó, có thể là điều gì đó hiển nhiên, nhưng tôi không thể nhìn thấy gì. performFetch:
có cần được gọi mỗi khi một số đối tượng được quản lý có khả năng thay đổi không? Khi nào thì NSFetchedResultsControllerD
thực sự là số gọi đại diện của họ?
Cảm ơn.
Bất kỳ giải pháp nào bạn tìm thấy cho hành vi này? Đang phải đối mặt với các tình huống tương tự khi cuộc gọi lại đại biểu của tôi không bao giờ được kích hoạt cho hoạt động cập nhật. Việc thêm các đối tượng mới hoặc xóa các đối tượng hiện có bằng cách nào đó cũng gọi phương thức ủy nhiệm. Nguyên nhân có thể là gì? –