发送的NSNotification对象是(null)?

时间:2015-01-06 22:12:19

标签: ios objective-c sockets nsnotificationcenter

当我从套接字接收数据并通过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)对象。通知成功,没有数据发送。

2 个答案:

答案 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];
  ...
}

Reference

答案 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];
}