【问题标题】:Why crashes UISearchBar after reload TableView为什么重新加载 TableView 后 UISearchBar 崩溃
【发布时间】:2014-01-20 07:16:22
【问题描述】:

我有UISearchBarDisplayController 的tableView。下面的代码是从网络服务器获取记录并显示tableview 单元格,每个都可以正常工作。但是什么时候向下和向上滚动 3 或 5 次,我将单击搜索栏,它会崩溃崩溃报告 NSLog 不打印任何内容。

记得我试过 NSZombie ,断点,异常点等,但没有任何帮助。

重要问题:

从网络服务器获取数据后如何将数据加载到tableview。因为tableview代表方法在从服务器获取数据之前被调用。

 DataFetchController *getDataFetch=[[DataFetchController alloc]init];
    //getleadFetch.delegate=self;
    [getDataFetch beginTaskWithCallbackBlock:^(NSArray *mm){


        [self.tableView reloadData];//if i comment this line the UISearchBar not crashes 


    }];

【问题讨论】:

  • 要确保的一件事是您在主 (UI) 线程上调用 [self.tableView reloadData]。如果这是您唯一的问题,则无法从您发布的内容中判断。

标签: ios iphone objective-c uitableview objective-c-blocks


【解决方案1】:

在数据获取完成之前加载 tableview 显然会导致崩溃。 因此,为了避免这种情况,我们需要知道数据提取何时完成。 这可以很容易地从您的 sql api 中获得,当获取完成时返回错误代码。您可以通过它来确定提取是否完成。因此,您可以按顺序提供重新加载表视图命令。 希望对你有帮助!!

【讨论】:

  • “在数据获取完成之前加载 tableview 显然会导致崩溃” - 不一定。这取决于他的委托方法中的代码做什么。他们可能只是调用一个 nil 对象,这会默默地导致表显示为空(没有崩溃)。
【解决方案2】:

在主线程中更新 tableview 数据不会崩溃。

dispatch_async(dispatch_get_main_queue(), ^{

        [self.tableView reloadData];

    });

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-05-06
    • 1970-01-01
    相关资源
    最近更新 更多