使用Sudz - 需要同步类型方法 - 或者睡觉直到sudz回调结束

时间:2012-08-14 01:27:58

标签: ios service web

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

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

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

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

我正在做的代码如下;

在第一个窗口的prepareForSegue中,我获取了我需要的代码并将其放入第二个视图实例中。 我清理并准备数据库然后退出prepareForeSeque。 所有这些都在起作用!

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

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

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

我可以“欺骗”我相信通过在我的主视图和子视图之间放置一个中间视图 - 并手动将segue发布到子视图 - 但是怀疑这是一种过度杀伤!

斯坦

1 个答案:

答案 0 :(得分:0)

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

您使用什么来进行网络服务电话?我使用AFNetworking开发了一个非常强大而简单的NetworkClient。所有的Web服务调用都有完成块,我处理我收到的数据。它将处理来自Web服务的字典或数组,并可以执行同步或异步调用。它还有一个可选的内置APIKey,可以设置并传递给Web服务以获得额外的安全性。所有Web服务必须能够处理表单POST请求,并且它可以完美地运行。

我一直在做你正在谈论的内容,我只是构建支持tableview的数组,然后在tableview上调用reloadData方法。

相关问题