我在更改主线程上的 UIView 时遇到了一些问题。
我想在我的视图中显示 xml 解析百分比。在解析时,它会将值初始化为 mylabel.text 并将其显示在控制台中,但不会显示在视图中。解析完成后,它会在我的标签中显示解析的最后一个值。
我知道这是主队列通过xml解析使用的主线程问题。如何停止 xml 解析并使 uilabel 在主线程中显示百分比?或任何想法显示 xml 解析百分比?我正在使用委托方法来显示解析过程。这是我的代码:
//在viewcontroller.h中
#import "TheParser.h"
@interface ViewController : UIViewController <TheParserProtocol> {
BOOL YN;
}
...
}
//视图控制器.m
- (IBAction)updatePage:(id)sender {
NSString *path = [[[NSBundle mainBundle]resourcePath]stringByAppendingPathComponent:@"files.xml"];
NSData *data = [[NSData alloc] initWithContentsOfFile:path];
NSXMLParser *xmlParser = [[NSXMLParser alloc] initWithData:data ];
TheParser *theParser = [[TheParser alloc] initParser];
[xmlParser setDelegate:theParser ];
theParser.delegate = self;
[xmlParser parse];
}
-(void) sendmes:(NSString *)str{
UrlText.text=[NSString stringWithFormat: @"Hi ,%@",str];
NSLog(@" UrlText.text is %@", UrlText.text);
}
//我的解析器类
// 在 TheParser.h 我的协议中
@protocol TheParserProtocol
-(void) sendmes : (NSString *) str;
@end
//在TheParser.m中
-(void) parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName attributes:(NSDictionary *)attributeDict {
if ([elementName isEqualToString: @"files"]) {
app.ListArray = [[NSMutableArray alloc] init];
}
else if ([elementName isEqualToString:@"file"]){
theList = [[List alloc]init];
int idValue = [[attributeDict objectForKey:@"id"] intValue];
[_delegate sendmes:[NSString stringWithFormat:@"%i",idValue]];
....
}
我检查过
[_delegate performSelectorOnMainThread:@selector(sendmes:) withObject: [NSString stringWithFormat:@"Last %i",i] waitUntilDone:NO];
和
dispatch_async(dispatch_get_main_queue(), ^{
NSLog(@"works");
[_delegate sendmes:[NSString stringWithFormat:@"%i",i]];
});
没有一个对我有用。
有人可以帮忙吗?
提前致谢