【问题标题】:NSXMLParser and multiple calls in view's life-cycle.NSXMLParser 和视图生命周期中的多个调用。
【发布时间】:2012-02-02 07:01:22
【问题描述】:

目前我在使用-(void)viewDidLoad 中的两个函数时遇到问题,这两个函数都使用NSUrlRequestHTTPPost 发送到网络服务以接收数据。

直到[self bar] 决定在[self foo] 完全完成之前开始工作,它才能正常工作。那么,在开始 [self foo] 之前,有没有什么聪明的方法可以检查 [self bar] 是否完全完成?

-(void)viewDidLoad{

[self foo]; // initiates a nsxmlparsercall to a webservice to get values.

[self bar]; // relies on the values recieved from [self foo] to make it's own call.

            /* However, [self bar] always crashes before initiating it's request.
            /* It crashes when the variables that are being sent with the poststring 
            /* are being set, as they are null. 
            /* Which means that the `[self foo]` doesnt get completed before starting [self bar];
}

在这一点上我可能很不高兴,我什至考虑过覆盖-(void)viewDidload 并设置一个布尔值来控制何时可以触发第二个函数,但这似乎是非常糟糕的编码..

任何关于如何为我指明正确方向的建议和/或提示将不胜感激。提前致谢。

【问题讨论】:

  • 我认为你应该在解析完​​这样的响应后把功能栏放在上面。 [xmlParser 解析]; [自我栏];
  • 如果我在后台线程中解析会有问题吗?

标签: objective-c nsxmlparser


【解决方案1】:

我最好的放置函数的地方是nsxmlparser 的委托方法之一,即

- (void)parserDidEndDocument:(NSXMLParser *)parser
{
    [self bar];
}

如果您在后台线程上解析响应,这很好,并且在主线程或后台线程上调用函数栏无关紧要。

但是如果你想在主线程上专门调用 bar 函数,那么你可以使用这个函数

[self performSelectorOnMainThread:@SEL(bar) withObject:nil waitUntilDone:YES];

【讨论】:

  • 谢谢,经过大约一小时的代码打磨,终于成功了。谢谢!
【解决方案2】:

你的意思是在 [self foo] 函数中你想要解析一些东西,当它完全解析时你想要调用 [self bar];功能对吗?

好的,那么您可以在解析完成时触发通知。通过这个通知你可以调用你想要的方法。

【讨论】:

  • 是的,这正是我想要的。
猜你喜欢
  • 1970-01-01
  • 2012-07-22
  • 2011-10-09
  • 1970-01-01
  • 2021-12-15
  • 2013-08-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多