Jestem świadomy standardowych powodów, dla których zgłoszenie nie być odbierane:NSNotificationCenter obserwator nie wysyłaj powiadomień
- dealokując albo uniemożliwienie zarejestrowanego obiektu.
- Usuwanie obiektu jako obserwatora.
- Niezarejestrowanie się jako obserwator.
- Rejestracja w przypadku nieprawidłowego powiadomienia lub wysłania nieprawidłowego powiadomienia.
Mogę z radością powiedzieć, że jestem pewien, że nic takiego się nie dzieje. Przypuszczam, że najprawdopodobniej obiekt jest w pewnym momencie unieważniany i odtwarzany, ale rejestruje powiadomienie podczas inicjalizacji.
Tu zarejestrować:
/**
* 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;
}
Oto gdzie mogę pisać zgłoszenia:
/**
* 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;
}
}
Jest to metoda, która nie jest nazywany:
/**
* 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.");
}];
}
ten to konsola wyjaśniająca, że zarówno rejestruję, jak i publikuję powiadomienie:
2012-11-15 13: 27: 50,958 iCloud klienta [11269: 907] Tylko zarejestrowany dla 'com.andbeyond.jamesvalaitis.notesChanged'
2012-11-15 13: 28: 24,184 iCloud niestandardowe [11269: 907] Podobnie pisał 'com.andbeyond.jamesvalaitis.notesChanged'
The whole project can be found here.
Dodaj metodę noteChanged do wpisu ... – chrislhardin
Twój selektor jest nadal podobny do tego @selector (noteChanged) .. jak to się to nazywa - (void) noteChanged: (NSNotification *) notification ??? musisz zmienić selektor, jak ten @selector (noteChanged :) –
@DineshRaja: Cześć Dinesh i James, mam do czynienia z podobnym problemem i po przejściu wszystkich odpowiedzi na ten post, stosując sugestie; wciąż rzeczy mi się nie przydały. Jestem w stanie opublikować powiadomienie i zadeklarować także obserwatora. Ale logika, w której dokonuje się sprawdzenia, nie zostaje wykonana. Jak powinienem udostępnić kod? Czy powinienem wysłać raczej zduplikowane pytanie? –