Trong câu trả lời khác tôi thấy 1,2 và 3 quá không hiệu quả. Cụ thể là 2 và ví dụ trong bài đăng trên blog "Phụ huynh xem con của nó". Vấn đề của tôi với điều đó là mọi phụ huynh đơn lẻ phải trả lời thông báo ngữ cảnh và về cơ bản mọi đối tượng được lưu nếu nó là đứa trẻ (đừng bận tâm đến thực tế ContextDidSave thích hợp hơn trong trường hợp đó!). Thay vào đó, tôi sẽ đề xuất một tùy chọn 4:
- Ghi đè con đã lưu và phát NSManagedObjectContextDidSaveNotification chứa phụ huynh.
Giải pháp của tôi hiệu quả hơn và cảm thấy hướng đối tượng hơn với tôi vì đối tượng đang thay đổi đang phản hồi thay đổi của chính nó. Để thực hiện điều này, trong việc sử dụng đối tượng trẻ:
-(void)didSave{
[super didSave];
// notify that the parent has changed.
[[NSNotificationCenter defaultCenter] postNotificationName:NSManagedObjectContextObjectsDidChangeNotification
object:self.managedObjectContext
userInfo:@{NSUpdatedObjectsKey : [NSSet setWithObject:self.parent]}];;
}
Để cập nhật các dấu thời gian phụ huynh, giải pháp gọn gàng sau (second last post) Tôi đã sử dụng có thể giúp đỡ, ví dụ trong việc sử dụng mẹ:
- (void) awakeFromInsert
{
[super awakeFromInsert];
// set the default dates
NSDate* date = [NSDate date];
self.timestamp = date;
//allow any future modifications to change the timestamp
_finishedStartup = YES;
}
- (void) awakeFromFetch
{
[super awakeFromFetch];
// we should already have creation and modified dates.
_finishedStartup = YES;
}
- (void) didChangeValueForKey: (NSString *) thisKey
{
[super didChangeValueForKey: thisKey];
if(![thisKey isEqualToString:@"timestamp"] && // prevent infinite loop
![self isFault] &&
![[[self managedObjectContext] undoManager] isUndoing] &&
_finishedStartup) // ensures we arent being called by the object being loaded from fetched data.
{
self.timestamp = [NSDate date];
}
}
Tôi yêu rằng tôi có thể gửi câu hỏi ra ngoài khoảng trống và nhận phản hồi! Tôi quyết định giải pháp # 2. Tôi đang lặp qua các mối quan hệ cha mẹ và kiểm tra xem có bất kỳ mối quan hệ nào managedObjects giống với thông báo managedObject không. –
Hãy nhớ rằng bạn có thể chạy một biến vị ngữ đối với những trường hợp 'NSSet' quay trở lại. Không cần lặp vòng :) Vị từ có thể giống như '@" entity.name ==% @ && parent ==% @ "' sẽ cung cấp cho bạn bất kỳ con nào của thực thể hiện tại có mối quan hệ mà bạn quan tâm. –
Tuyệt vời, cảm ơn! Làm việc như một say mê. Tôi hy vọng bạn không phiền nếu tôi bao gồm một liên kết đến bài đăng trên blog của bạn về chủ đề này ["Parent Watching it's Child"] (http: //www.cimgf.com/2011/10/14/parent-watching-its-child /) và cũng là một plug cho cuốn sách của bạn ["Core Data"] (http://www.amazon.com/Core-Data-Apples-API-Persisting/dp/1934356328/ref = sr_1_3? ie = UTF8 & qid = 1319500666 & sr = 8-3) Tôi đã tham chiếu nó thường xuyên. Ngoài ra, trong trường hợp của tôi, điều khác tôi cần làm là tạo ra các Accessitive nguyên thủy cho dấu thời gian trong lớp con NSManagedObject, để ngăn nó đi vào một vòng lặp thông báo vô hạn. –