2011-10-20 30 views
7

Tôi đang sử dụng quan sát-giá trị quan sát. Tôi có object_1 (NSManagedObject) và một số đối tượng quan sát khác. Khi tôi loại bỏ object_1 khỏi bối cảnh đối tượng được quản lý, chương trình của tôi bị treo.KVO: Tôi có thể xóa tất cả các nhà quan sát khỏi đối tượng cụ thể không

CoreData: lỗi: Lỗi ứng dụng nghiêm trọng. Ngoại lệ đã bị bắt trong quá trình xử lý thay đổi Dữ liệu cốt lõi. Đây thường là một lỗi trong một người quan sát của NSManagedObjectContextObjectsDidChangeNotification.

Tôi có thể đặt thứ gì đó vào phương thức dealloc (hoặc một nơi khác) để xóa tất cả các quan sát viên của đối tượng_1 không? Hoặc quyết định duy nhất phù hợp là gửi thông báo ngay khi tôi sắp xóa object_1 khỏi bối cảnh đối tượng được quản lý và nghe thông báo này bởi các đối tượng khác (để tự xóa mình khỏi người quan sát đối tượng_1)?

Trả lời

7

Bạn cần đảm bảo người quan sát của mình bị xóa trước khi đối tượng của bạn được giải phóng. Đây là nhược điểm của Trình theo dõi giá trị khóa.

Như bạn đề xuất, một cách để thực hiện điều này là thông qua việc xóa được kích hoạt từ bên trong phương thức dealloc của bạn. Rõ ràng là bạn không thể biết ai có quan sát viên về đối tượng của bạn nhưng vẫn cần phải thông báo cho họ.

Tôi mô tả những gì bạn cần làm nhưng có lẽ chỉ cần xem câu trả lời của câu hỏi bj-homer trong câu hỏi When should I remove observers? Error about deallocating objects before removing observers.

Nếu đây là những gì bạn đang theo dõi thì hãy bỏ phiếu ở đó. Nếu không, bỏ phiếu ở đây. Hy vọng nó sẽ giúp, anyway.

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