在appDelegate中调用块内的方法

时间:2014-11-22 14:35:21

标签: objective-c parse-platform objective-c-blocks

我正在开发一个响应Parse推送通知的应用。在应用程序的某个时刻,我想按下另一个用户发送的推送通知,这应该将我重定向到我的TabBarController中的第三个ViewController(选项卡),我想在该选项卡中显示一个视图。

[query findObjectsInBackgroundWithBlock:^(NSArray *objects, NSError *error){
    if (!error && [PFUser currentUser]) {
       //Display the TabBarController
       UIViewController *controller = [[UIViewController alloc] init];
       controller = [storyboard instantiateViewControllerWithIdentifier:@"TabBar"];
       self.window.rootViewController = controller;
       [self.window makeKeyAndVisible];
       //Display the third tab
       self.tabBarController = (TabBarViewController *)self.window.rootViewController;
       self.tabBarController.delegate = (id)self;
       self.tabBarController.selectedIndex = 2;

       [self.tabBarController display];


    }
    else{
       NSLog(@"%@", error);
    }

}];    

我正在查询向我发送通知的用户,在查询完成后,我想在我的TabBarContoller的ViewController中的Label中显示用户的用户名。 (但为了简单起见,我只是想在第三个标签中显示一个视图)。

我尝试在块之外执行相同的代码行并且它有效,但是出于某种原因,当我尝试在块内执行[self.tabBarController display]时,它不起作用。

我也尝试过:

__block TabBarViewController* blocksafeSelf = self.tabBarController;

....

....

[blocksafeSelf display];

但它没有用!

我一直在寻找如何解决它的几个小时!任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:1)

尝试放

dispatch_sync(dispatch_get_main_queue(), ^{
    [self.tabBarController display];
});

在您的原始方法中,您似乎在后台线程上进行UI更新,这可能会导致奇怪的事情发生