我知道为什么不收到通知的标准原因:
我可以高兴地说,我很确定这些都不会发生。我想最有可能的是,对象在某些时候被无效并重新创建,但它会在初始化时注册通知。
这是我注册的地方:
/**
* 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 Custom [11269:907]刚刚注册 'com.andbeyond.jamesvalaitis.notesChanged'
2012-11-15 13:28:24.184 iCloud Custom [11269:907]刚发布 'com.andbeyond.jamesvalaitis.notesChanged'
答案 0 :(得分:21)
我想我已经找到了答案。您正在名为UIDocument
的{{1}}文件中创建通知。因此,在创建观察者时,将对象设置为NotesDocument.m
。这意味着NotesDocument对象。但是当您self
时,您将对象发送为post the notification
。所以nil
根据文档。 解决此问题的简便方法是在创建通知时需要将对象设置为it wont observe the notification
。否则,您需要传递nil
。
查看addObserver通知方法的以下图像和参数详细信息。
查看NotesDocument Object
参数。观察者想要收到通知的对象;也就是说,只有此发件人发送的通知才会传递给观察者。
答案 1 :(得分:0)
更改以下内容:
...
selector:@selector(noteChanged:)
...
- (void) noteChanged:(NSNotification *) notification
...
答案 2 :(得分:-5)