我在操作中发布这样的通知:
DownloadStatus * status = [[DownloadStatus alloc] init];
[status setMessage: @"Download started"];
[status setStarted];
[status setCompleteSize: [filesize intValue]];
[userInfo setValue:status forKey:@"state"];
[[NSNotificationCenter defaultCenter]
postNotificationName:[targetURL absoluteString]
object:nil userInfo:userInfo];
[status release];
DownloadStatus 是一个对象,其中包含有关当前正在下载的下载的一些信息。userInfo 是已在 init 部分初始化的对象的属性,并在操作的整个过程中保留。它是这样创建的:
NSDictionary * userInfo = [NSDictionary dictionaryWithObject:targetURL
forKey:@"state"];
“targetURL”是一个 NSString,我使用它只是为了确保一切正常。当我收到事件时 - 我是这样注册的:
[[NSNotificationCenter defaultCenter]
addObserver:self selector:@selector(downloadStatusUpdate:)
name:videoUrl
object:nil];
这里的“videoUrl”是一个包含正在下载的 url 的字符串,这样我就会收到关于我正在等待下载的 url 的通知。
选择器是这样实现的:
- (void) downloadStatusUpdate:(NSNotification*) note {
NSDictionary * ui = note.userInfo; // Tried also [note userInfo]
if ( ui == nil ) {
DLog(@"Received an update message without userInfo!");
return;
}
DownloadStatus * state = [[ui allValues] objectAtIndex:0];
if ( state == nil ) {
DLog(@"Received notification without state!");
return;
}
DLog(@"Status message: %@", state.message);
[state release], state = nil;
[ui release], ui = nil; }
但是这个选择器总是接收一个空的 userInfo。我究竟做错了什么?
世界卫生组织先生