0

我是一个相当新的 IOS 开发人员 - 总的来说一切都很顺利,除了.....

我有一个保存代码列表的程序。我可以点击“+”来添加新代码,新视图会调用 Web 服务来验证数据,如果有效则将其添加到内部 sqlite 数据库中。到现在为止还挺好。

在进入应用程序时,数据视图会使用数据库中的所有代码进行更新。又好。如果用户选择其中一个代码,则应该发生的是;

调用另一个服务以从数据库中获取详细数据(如果有兴趣,可以使用 SQL 服务器)。将此数据放入初始化表中。在另一个视图中显示数据。

我正在做的代码如下;

在第一个窗口的 prepareForSegue 中,我得到了我需要的代码并将其放入第二个视图实例中。我清理并准备数据库,然后退出 prepareForeSeque。以上所有方法都有效!

然后调用第二个视图控制器上的 viewDidLoad。

它获取传入的变量,构造服务请求并调用服务。然后它退出,然后另一个数据视图调用 numberOfRowsInSection - 它返回零,因为尚未调用来自处理 XML 数据并将其推入数据库的服务的回调!

我确实尝试过制作一个信号量变量,并在它处理完数据后将其设置在服务回调中。然后在 viewDidLoad 我旋转等待这个变量被设置。我使用 [NSSthread sleepForTimeInterval:0.25] 旋转,但怀疑我正在阻止调用服务回调。

我相信我可以通过在主视图和子视图之间放置一个中间视图来“作弊” - 并手动将 segue 发送到子视图 - 但怀疑这是一种矫枉过正!

斯坦

4

1 回答 1

0

您需要[self.myTableView reloadData];在 Web 服务请求的完成块或委托方法内调用。

您使用什么进行 Web 服务调用?我使用 AFNetworking 开发了一个非常强大且简单的 NetworkClient。所有 Web 服务调用都有完成块,我在其中处理返回的数据。它将处理来自 Web 服务的字典或数组,并且可以进行同步或异步调用。它还有一个可选的内置 APIKey,可以设置并传递给 Web 服务以提高安全性。Web 服务所要做的就是处理表单 POST 请求,并且它可以完美运行。

I do what you are talking about all the time and I just build the array that supports the tableview and then call the reloadData method on the tableview.

于 2012-08-14T01:35:17.400 回答