2010-04-06 32 views
2

我是iphone开发新手。我创建了一个应用程序,在第一个标签栏视图中加载一个网页,在第二个标签栏视图中,它解析一个xml文件并在表格视图中显示内容。当我点击第二个标签栏时,只有在解析完成后才能看到标签栏视图,直到解析时间标签栏显示为未选定状态。我想在解析完成时显示带活动指示器的标签栏视图。如何我做到了,请帮助我。谢谢。如何在iphone中解析完成时显示标签栏视图?

回答

1

没有额外的信息很难说,但我想你解析viewDidLoad()loadView(内的XML文件)。但是,解析可能实际上需要时间,并且您正在阻止负责更新UI的主线程。这就是为什么只有在解析完成后才能看到标签栏的原因。

要解决这种情况,您需要推迟显示数据的表视图,显示活动指示符以告诉用户正在发生的事情,并启动后台线程来负责解析XML文件。处理线程XML文件一旦完成,然后停止活动指示器并使用解析的数据设置您的表视图。

你可以做到这一点很容易利用现有的API(detachNewThreadSelector:toTarget:withObject:performSelectorOnMainThread:withObject:waitUntilDone:等),然而,你可能要考虑采取的MBProgressHUD提供正是你需要包裹在一个非常容易使用类的功能优势。

0

我假定你知道或将能够弄清楚如何让活动指示器工作。

您可以使用NSXMLparser委托方法来分析xml数据。您可以收集模型对象中的xml数据,这些数据是您在类中解析xml(即简单数组)的属性。然后,从希望收到完成解析的通知的角度来看,您可以使用键值观察(KVO)将其注册为关键路径的观察者。一旦这些属性的值发生变化,您的视图(或中间类)将被发送一条消息,然后它可以用来更新显示。

只要发送消息的类是适用于这些属性的键值编码(KVC),这些消息就会发送给注册的观察者。在大多数情况下,通过属性使您的ivars可用。

添加一个观察者:

- (void)addObserver:(NSObject *)anObserver forKeyPath:(NSString *)keyPath options:(NSKeyValueObservingOptions)options context:(void *)context 

通知的变化:

- (void)didChangeValueForKey:(NSString *)key 

退房键值观察文档:

http://developer.apple.com/iphone/library/documentation/Cocoa/Reference/Foundation/Protocols/NSKeyValueObserving_Protocol/Reference/Reference.html#//apple_ref/doc/uid/20002299-SW7

0

我想你应该必须在指定的时间内使用NSTimer类。

执行解析数据的方法(即,GetXMLData --user定义的方法),通过它的方法,

NSTimer *currentTimer = [NSTimer scheduledTimerWithTimeInterval:2.0 target:self selector:@selector(GetXMLData:) userInfo:nil repeats:NO]; 

,并开始活动指示灯使用

[activityIndicator startAnimating]; 

停在它下面的方法

- (void)parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName 
    namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName { 
. 
. 
. 
[activityIndicator stopAnimating]; 

} 

我希望你undrstand我是什么告诉... 做评论,如果需要任何帮助...

0
  1. 不做在MainThread分析,分离新线程做解析([NSThread detachNewThreadSelector:toTarget:withObject:]
  2. 解析后(parserDidEndDocument:)使用performSelectorOnMainThread刷新的tableView 。
相关问题