I am aware of the standard reasons as to why a notification would not be received:
I can happily say that I am damn sure that none of these are happening. I suppose the most likely is that the object is at some point being nullified and recreated, but it registers for the notification upon initialisation.
Here is where I register:
/**
* initialises an object with a unique file url
*
* @param url the url to set as the file url
*/
- (id)initWithFileURL:(NSURL *)url
{
if (self = [super initWithFileURL:url])
{
self.entries = [[NSMutableArray alloc] init];
// we want to be notified when a note has changed
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(noteChanged)
name:@"com.andbeyond.jamesvalaitis.notesChanged"
object:self];
NSLog(@"Just registered for 'com.andbeyond.jamesvalaitis.notesChanged'");
}
return self;
}
Here is where I post the notification:
/**
* save the note content
*/
- (void)saveNote
{
if (_isChanged)
{
// save to the text view to the note's contents
self.note.noteContent = self.noteView.text;
// post a notification that we changed the notes
[[NSNotificationCenter defaultCenter] postNotificationName:@"com.andbeyond.jamesvalaitis.notesChanged" object:nil];
NSLog(@"Just posted 'com.andbeyond.jamesvalaitis.notesChanged'");
// make sure we know it's already saved
_isChanged = NO;
}
}
This is the method that is not being called:
/**
* called when a note has changed
*/
- (void)noteChanged:(NSNotification *)notification
{
NSLog(@"Just received for 'com.andbeyond.jamesvalaitis.notesChanged'");
// save the notes
[self saveToURL:self.fileURL forSaveOperation:UIDocumentSaveForOverwriting completionHandler:^(BOOL success)
{
if (success)
NSLog(@"Note updated.");
}];
}
This is the console clarifying that I both register and post the notification:
2012-11-15 13:27:50.958 iCloud Custom[11269:907] Just registered for 'com.andbeyond.jamesvalaitis.notesChanged'
2012-11-15 13:28:24.184 iCloud Custom[11269:907] Just posted 'com.andbeyond.jamesvalaitis.notesChanged'
I think I have figured out the answer. You are creating the notification in UIDocument
file named NotesDocument.m
. So when you create an observer, you set the object as self
. That means the NotesDocument object . But when you post the notification
, you are sending the object as nil
. So it wont observe the notification
as per documentation. Easy way to overcome this is you need set object as nil
when creating a notification. Otherwise you need to pass an NotesDocument Object
.
Check out the below image and parameter details for the addObserver method of notification.
check out the notificationSender
parameter .The object whose notifications the observer wants to receive; that is, only notifications sent by this sender are delivered to the observer.
Change the following:
...
selector:@selector(noteChanged:)
...
- (void) noteChanged:(NSNotification *) notification
...
The following url will solve your problem.
http://mobile.tutsplus.com/tutorials/iphone/ios-sdk_nsnotificationcenter
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.