后台 iCloud 处理减慢 gui 和损坏视图控制器堆栈-如何停止多次触摸

Posted

技术标签:

【中文标题】后台 iCloud 处理减慢 gui 和损坏视图控制器堆栈-如何停止多次触摸【英文标题】:Background iCloud processing slowing gui and corrupting view controller stack- how to stop multiple touches 【发布时间】:2012-05-02 02:12:49 【问题描述】:

我偶尔会从 NSMetadataQueryDidUpdateNotification 获取更新。它们在后台异步线程中运行,但有时仍会减慢应用程序的速度。

问题是这会减慢我的 TableView 速度,以至于如果您单击一行,它有时不会立即推送它。这是 tableView 内部的一个简单调用:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath

[[self navigationController] pushViewController:detailViewController animated:YES];
[detailViewController release];

如果您多次触摸该行(沮丧地),应用程序视图控制器堆栈就会混乱:

nested push animation can result in corrupted navigation bar
nested push animation can result in corrupted navigation bar
nested push animation can result in corrupted navigation bar
Finishing up a navigation transition in an unexpected state. Navigation Bar subview tree might get corrupted.
Finishing up a navigation transition in an unexpected state. Navigation Bar subview tree might get corrupted.
Finishing up a navigation transition in an unexpected state. Navigation Bar subview tree might get corrupted.
Unbalanced calls to begin/end appearance transitions for <DetailViewController: 0xdabc0c0>

如何阻止这种情况发生并且只接受对行的第一次触摸?

【问题讨论】:

【参考方案1】:

我现在已经部分解决了这个问题。我尝试使用:

[self.view setUserInteractionEnabled:NO];

在我的添加按钮方法和 tableView didSelectRowAtIndexPath 但它没有解决多次按下问题。所以我不得不单独禁用它们:

添加按钮的创建:

    UIBarButtonItem *bbi = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemAdd target:self action:@selector(addNew:)];
    self.addBtn = bbi;
    [[self navigationItem] setRightBarButtonItem:bbi];

在我的 addNew: 方法的开头

[self.addBtn setEnabled:NO];

在我的 tableView didSelectRowAtIndexPath 方法的开头

[self.myTable setAllowsSelection:NO];

在视图中将出现:

[self.addBtn setEnabled:YES];
[self.myTable setAllowsSelection:YES];

【讨论】:

以上是关于后台 iCloud 处理减慢 gui 和损坏视图控制器堆栈-如何停止多次触摸的主要内容,如果未能解决你的问题,请参考以下文章

iOS 9 键盘:此应用程序正在从后台线程修改自动布局引擎,这可能导致引擎损坏和奇怪的崩溃

为啥没有调用第二个单点触控视图控制器工具栏按钮事件处理程序

精通iOS开发》书籍目录

Java:具有后台线程的 GUI 应用程序

在进入后台时将 UIDocument 上传到 iCloud

学说减慢了表现