当我从套接字接收数据并通过NSNotificationCenter将数据传递给另一个VC时,传递的对象始终记录(null),尽管该对象存在于另一个类中。
我在那里传递数据。
更新:
-(void) initSIOSocket {
[SIOSocket socketWithHost:@"http://192.168.1.4:8080" response:^(SIOSocket *socket) {
self.socket = socket;
NSLog(@"%@ from initSIOSocket", self.socket);
[self.socket on:@"q_update_B" callback:^(NSArray *args) {
NSArray *tracks = [args objectAtIndex:0];
[[NSNotificationCenter defaultCenter] postNotificationName:@"qUpdateB" object:nil userInfo:[NSDictionary dictionaryWithObject:tracks forKey:@"tracksData"]];
}];
...
- (void)receiveUpdateBNotification:(NSNotification *)notification
{
// Do parse respone data method and update yourTableViewData
NSArray *tracks = [[notification userInfo] objectForKey:@"tracksData"];
NSLog(@"%@", tracks);
self.tracks = tracks;
[self.tableView reloadData];
}
控制台是STILL记录为(null)对象。通知成功,没有数据发送。
答案 0 :(得分:2)
要使用NSNotification
传递数据,您需要使用userInfo
字典。
发布如下:
[[NSNotificationCenter defaultCenter] postNotificationName:@"qUpdateB" object:nil userInfo:[NSDictionary dictionaryWithObject:tracks forKey:@"MyData"]];
使用以下方法检索它:
- (void)receiveUpdateBNotification:(NSNotification *)notification
{
self.tracks = [[notification userInfo] objectForKey:@"MyData"];
[self.tableView reloadData];
}
对象属性不用于传递数据。
对象
与通知关联的对象。 (只读)声明
@property(readonly, retain) id object Discussion;
这通常是发布此通知的对象。它可能是零。
通常,您使用此方法来查找通知的对象 当您收到通知时适用。
例如,假设您已注册一个对象以接收该对象 message handlePortDeath:发布“PortInvalid”通知时 到通知中心和handlePortDeath:需要访问 监视现在无效的端口的对象。 handlePortDeath: 可以检索该对象,如下所示:
- (void)handlePortDeath:(NSNotification *)notification { ... [self reclaimResourcesForPort:notification.object]; ... }
答案 1 :(得分:-1)
我需要使用我的Singleton来使用NSNotificationCenter传递数据,就像这样。
-(void) initSIOSocket {
[SIOSocket socketWithHost:@"http://192.168.1.4:8080" response:^(SIOSocket *socket) {
self.socket = socket;
NSLog(@"%@ from initSIOSocket", self.socket);
[self.socket on:@"q_update_B" callback:^(NSArray *args) {
NSArray *tracks = [args objectAtIndex:0];
self.setListTracks = tracks;
[[NSNotificationCenter defaultCenter] postNotificationName:@"qUpdateB" object:nil];
}];
}];
}
...
- (void)receiveUpdateBNotification:(NSNotification *)notification
{
if ([[notification name] isEqualToString:@"qUpdateB"])
NSLog (@"Successfully received the test notification!");
// Do parse respone data method and update yourTableViewData
NSArray *tracks = [[SocketKeeperSingleton sharedInstance]setListTracks];
self.tracks = tracks;
[self.tableView reloadData];
}