Ich bin mir bewusst, der Standard Gründe, warum eine Benachrichtigung nicht empfangen werden:NSNotificationCenter Beobachter nicht Notification Empfangs
- Aufheben der Zuordnung oder das registrierte Objekt zunichte gemacht.
- Entfernen des Objekts als Beobachter.
- Nicht als Beobachter registriert.
- Registrierung für die falsche Benachrichtigung oder das Posten der falschen Benachrichtigung.
Ich kann glücklich sagen, dass ich verdammt sicher bin, dass keiner von diesen geschieht. Ich nehme an, dass das Objekt am wahrscheinlichsten annulliert und neu erstellt wird, aber es registriert sich bei der Initialisierung für die Benachrichtigung.
Hier ist, wo ich registrieren:
/**
* 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;
}
Hier ist, wo ich die Meldung schreiben:
/**
* 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;
}
}
Dies ist die Methode, der nicht genannt wird: Das
/**
* 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.");
}];
}
ist die Konsole, die klarstellt, dass ich sowohl die Meldung registriere und posten:
2012-11-15 13: 27: 50,958 iCloud Custom [11269: 907] Nur registrierte für
2012-11-15 13 'com.andbeyond.jamesvalaitis.notesChanged': 28: 24,184 iCloud Custom [11269: 907] geschrieben Gerade 'com.andbeyond.jamesvalaitis.notesChanged'
The whole project can be found here.
Fügen Sie die notedChanged-Methode zum Beitrag hinzu ... – chrislhardin
Ihr Selektor ist immer noch wie dieser @selector (noteChanged) .. dann wie nennt man das - (void) noteChanged: (NSNotification *) Benachrichtigung ??? Sie müssen Ihren Selektor wie folgt ändern @selector (noteChanged :) –
@DineshRaja: Hallo Dinesh und James, ich stehe vor einem ähnlichen Problem und habe alle Antworten auf diesen Beitrag durchgelesen und die Vorschläge übernommen; die Dinge haben sich für mich nicht bewährt. Ich kann die Benachrichtigung erfolgreich posten und den Observer ebenfalls deklarieren. Aber die Logik, in der die Überprüfung durchgeführt wird, wird nicht ausgeführt. Wie soll ich den Code teilen? Oder sollte ich eine eher doppelte Frage posten? –