【问题标题】:Calling method within block in appDelegate在 appDelegate 中的块内调用方法
【发布时间】:2014-11-22 14:35:20
【问题描述】:

我正在开发一个响应 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 中的标签中显示用户的用户名。 (但为了简单起见,我现在只想在第三个选项卡中显示一个视图)。

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

我也试过了:

__block TabBarViewController* blocksafeSelf = self.tabBarController;

....

....

[blocksafeSelf display];

但它没有用!

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

【问题讨论】:

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


    【解决方案1】:

    试试看

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

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

    【讨论】:

    • 否则尝试将所有内容放入我刚才提到的块中,看看是否可行,然后从那里开始
    • 感谢您的回复,但很遗憾没有成功。如果我将所有内容都放在块中,则应用程序只会出现黑屏并在一段时间后崩溃。我也尝试使用 [self.tabBarController performSelectorOnMainThread:@selector(display) withObject:nil waitUntilDone:NO] 但没有任何运气。
    • 我发现了问题所在!!我有一行代码试图提取数组对象的第一个索引(由于错误,它总是为零),并且由于某种原因它阻塞了后面的任何行。我不知道添加它是否相关,所以我从帖子中删除了它。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-04-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-11-18
    • 1970-01-01
    相关资源
    最近更新 更多