【问题标题】:pushViewController Taking too much to show the viewpushViewController 显示视图过多
【发布时间】:2012-12-21 20:40:05
【问题描述】:

我有一个很轻的 ViewController,它在 viewDidLoad 中什么都不做。我将这个视图推到navigationController 之上。从块内部调用执行此操作的方法。在调用 showView 之后,我添加了一个 NSLog,并且该日志在控制台中的打印速度非常快,但是视图需要大量加载......我真的不明白可能发生了什么......任何想法???

ABAddressBookRequestAccessWithCompletion(addressBookRef, ^(bool granted, CFErrorRef error) {
    [self showView];
    NSLog(@"EXECUTED");                
});

- (void) showView{
    TestViewController *test = [[TestViewController alloc]init];
    [self.navigationController pushViewController:test animated:NO];
}

【问题讨论】:

  • 你能发帖TestViewController吗?很难看出这里发生了什么

标签: objective-c ios cocoa-touch


【解决方案1】:

来自ABAddressBookRequestAccessWithCompletion 的文档:

在任意队列上调用完成处理程序。如果您的应用在整个应用中使用地址簿,您有责任确保将该地址簿的所有使用分派到单个队列,以确保正确的线程安全操作。

您应该确保在主线程上调用您的 UI 代码。

ABAddressBookRequestAccessWithCompletion(addressBookRef, ^(bool granted, CFErrorRef error {
     dispatch_async(dispatch_get_main_queue(), ^{
         [self showView];
         NSLog(@"EXECUTED");                
     });
});

【讨论】:

  • 确保修复你的语法高亮,我不能,因为它们只是空格
  • @NSAddict 谢谢 - 我通常会注意到这样的事情。
【解决方案2】:

这可能不是唯一的问题,但根据docs,传递给ABAddressBookRequestAccessWithCompletion 的完成处理程序在任意队列上被调用。 -showView 应该只在主队列上调用,因为它正在处理 UIViewController 对象。

要问的另一件事是主队列上还发生了什么?是否有其他长期运行的任务可能会阻止 UI 更新?

【讨论】:

    猜你喜欢
    • 2014-02-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-08-03
    • 1970-01-01
    • 2010-12-13
    相关资源
    最近更新 更多