通知が受信されない理由について、私は標準的な理由を知っています。
- 登録されたオブジェクトの割り当てを解除または無効にします。
- オブザーバーとしてオブジェクトを削除します。
- オブザーバーとして登録していません。
- 間違った通知に登録するか、間違った通知を投稿します。
私はこれらのどれも起こっていないことを確信していると喜んで言うことができます。最も可能性が高いのは、オブジェクトが無効化されて再作成されている可能性が高いと思いますが、初期化時に通知に登録されます。
ここに私が登録します:
/**
* 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;
}
これが私が通知を投稿する場所です:
/**
* 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;
}
}
これは呼び出されていないメソッドです:
/**
* 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.");
}];
}
これは、通知の登録と投稿の両方を行っていることを明確にするコンソールです。
2012-11-15 13:27:50.958 iCloudカスタム[11269:907]「com.andbeyond.jamesvalaitis.notesChanged」に登録されました
2012-11-15 13:28:24.184 iCloudカスタム[11269:907]投稿されたばかりの「com.andbeyond.jamesvalaitis.notesChanged」