I am using MagicalRecord to help with core data operation.
I have a NSOperation subclass called OfflineRetrieveOperation. It retrieve the message from the server and save it.
the code is like this:
NSManagedObjectContext *context = [NSManagedObjectContext contextForCurrentThread];
Message *existMessage = [Message MessageWithMessageID:messageID inManagedObjectContext:context];
if (!existMessage) {
Message *message = [Message insertMessageWithProperties:properties inManagedObjectContext:context];
}
[context save];
The notification receiver is initialized like this:
- (id)init
{
self = [super init];
if (self != nil) {
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(contextDidSave:)
name:NSManagedObjectContextDidSaveNotification
object:[NSManagedObjectContext defaultContext]];
[self setContext:[NSManagedObjectContext context]];
}
return self;
}
the log:
-[NSManagedObjectContext(MagicalRecord) saveWithErrorHandler:](0x5906a0) Saving Context
-[NSManagedObjectContext(MagicalRecord) mergeChangesFromNotification:](0x37eab0) Merging changes to *** DEFAULT *** context *** on Main Thread ***
Everything seems work fine except I can’t receive the NSManagedObjectContextDidSaveNotification at all, so that I can’t know that I have already finish retrieving.
Your
OfflineRetrieveOperationis probably creating its ownNSManagedObjectContext. When you save that context it will fire theNSManagedObjectContextDidSaveNotification. However you have an observer that will only listen for aNSNotificationbeing broadcast by the[NSManagedObjectContext defaultContext].Change your observer to consume notifications from your
OfflineRetrieveOperationinternalNSManagedObjectContextinstead of[NSManagedObjectContext defaultContext]and it should start receiving them.