我是iphone开发的新手。我创建了一个应用程序,其中第一个标签栏视图,加载网页,在第二个标签栏视图中,它解析xml文件并在表格视图中显示内容。当我单击第二个标签栏时,只有在解析完成后才能看到标签栏视图,直到标签栏显示为未选中的解析时间。我想在解析完成时显示带活动指示标签的标签栏视图。如何我实现了它。请帮帮我。谢谢。
答案 0 :(得分:1)
如果没有其他相关信息很难说,但我猜您正在解析viewDidLoad()
或loadView(
内的XML文件。但是,解析实际上可能需要时间,并且您正在阻止负责更新UI的主线程。这就是为什么只有在解析完成后才能看到标签栏的原因。
要解决这种情况,您需要推迟显示数据的表视图,显示活动指示符以告知用户正在进行的操作,并启动负责解析XML文件的后台线程。处理XML的线程文件一旦完成,然后停止活动指示器并使用解析的数据设置表视图。
您可以使用可用的API(detachNewThreadSelector:toTarget:withObject:
和performSelectorOnMainThread:withObject:waitUntilDone:
等)轻松完成此操作,但是,您可能需要考虑利用MBProgressHUD来提供您需要的功能包裹在一个非常容易使用的课程中。
答案 1 :(得分:0)
我认为您知道或将能够弄清楚如何使活动指标正常工作。
您可以使用NSXMLparser委托方法来解析xml数据。您可以在模型对象中收集xml数据,这些对象是您在类中解析xml的属性,即一个简单的数组。然后,从您希望收到已完成解析通知的视图中,您可以使用键值观察(KVO)将其注册为这些模型对象的键路径的观察者。一旦这些属性的值发生变化,您的视图(或中间类)将被发送一条消息,然后可以使用该消息来更新显示。
只要发送消息的类符合这些属性的键值编码(KVC),这些消息就会被发送到已注册的观察者。在大多数情况下,通过房产可以使你的伊萨尔人进入。
添加观察者:
- (void)addObserver:(NSObject *)anObserver forKeyPath:(NSString *)keyPath options:(NSKeyValueObservingOptions)options context:(void *)context
收到变更通知:
- (void)didChangeValueForKey:(NSString *)key
查看关键值观察文件:
答案 2 :(得分:0)
我认为您必须在指定的时间内使用NSTimer类。
执行解析数据的方法(即GetXMLData - 用户定义的方法)方法,
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];
}
我希望你能理解我在说什么...... 如果需要任何帮助,请发表评论......
答案 3 :(得分:0)