【问题标题】:iPhone, how do I determine when a child screen passes back to a UITableView and how do I update that row?iPhone,我如何确定子屏幕何时传递回 UITableView 以及如何更新该行?
【发布时间】:2010-09-30 11:39:21
【问题描述】:

前几天我问了一个问题,关于在显示表后如何将行添加到 UITableView,我被告知应该更新数据源并调用 insertIndexPaths:withRowAnimation。

我的 UITable 视图包含数据行,当单击该行时,会显示另一个屏幕,允许用户编辑数据,一旦他们单击该屏幕的完成,我希望该行中的数据也可以更新。我知道在这里调用 reloadData 不是正确的方法。

往后退一两步,UITableView 视图如何知道它何时返回为编辑屏幕?哪个事件处理数据源/行更新?

我还想以类似的方式添加新行(在和添加视图中),那么我使用哪个事件?

【问题讨论】:

    标签: iphone xcode uitableview iphone-sdk-3.0


    【解决方案1】:

    您可以通过-viewWillAppear:animated: 跟踪。这适用于任何视图控制器。在那里重新加载您的数据。所以流程是:

    • 编辑您的数据
    • 将新数据保存在模型中(表格视图获取数据的地方)
    • 弹出详细视图控制器
    • 在表格视图控制器中,有一个 viewWillAppear:animated: 方法,用于重新加载表格(使用 reloadData

    【讨论】:

    • 有人告诉我,一旦表格被加载,就永远不要重新加载数据,因为它看起来很糟糕。
    • 我也收到此警告和崩溃警告:取消调用 - 当前线程堆栈上的 objc 代码使这不安全。在我将数据数组分配给数据源数组的那一行
    • 请注意,您有两个视图控制器,您应该在第一个视图控制器的 viewWillAppear 方法上调用 reloadData。不是第二个,您正在编辑数据。内文是对的,请仔细听从他的指示。
    • 不,我根本没有调用 reloadData,我会在之后调用它。我现在正在 viewWillApear 中更新我的数据源。这就是导致错误的原因。
    • 回顾一下,我已经将所有代码从 viewDidLoad 方法(sqlite3,从数据库获取记录,到一个临时数组,分配给我的数据源数组)。然后我按照 nevan 的建议将代码移动到 viewWillAppear。在将我的 dataSource 数组分配给我的临时数组时,我收到警告“取消调用 - 当前线程堆栈上的 objc 代码使这不安全。”然后我的应用程序因 EXC_BAD_ACCESS 而崩溃。所以我的问题是如何在调用 reloadData 之前正确分配我的数据源?
    猜你喜欢
    • 1970-01-01
    • 2020-12-17
    • 1970-01-01
    • 1970-01-01
    • 2013-04-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多