我一直在尝试在解析器(在单独的线程上)完成后添加一个按钮。我知道你不能在除主线程之外的任何线程上与UI元素进行交互。
我不想使用计时器或while语句...所以我的问题是
解析器完成后,您建议我将按钮添加到视图中吗?我之前不希望它添加,因为用户将获得一个空白表。我也不想在完成后重新加载表,因为这给我带来了其他问题。
主线程上的performSelector对我来说似乎也不起作用..?我有点迷失在这里...
有什么建议吗?
这是我开始另一个线程启动解析器的地方(在AppDelegate中)
// begin background downloads
[NSThread detachNewThreadSelector:@selector(parseNewData) toTarget:self withObject:nil];
我的parseNewData函数(在AppDelegate中)
-(void)parseNewData {
//start network activity spinner and release controller when done
RootViewController * root = [[RootViewController alloc] init];
[root downloadIcon];
[root release];
//create pool to avoid memory leak
NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
// get the XML path and start parsing
NSURL *pathURL = [NSURL URLWithString:@"http://www.mysite.com/file.xml"];
NSXMLParser *parser = [[NSXMLParser alloc] initWithContentsOfURL:pathURL];
[parser setDelegate:self];
[parser parse];
//drain pool
[pool drain];
[pool release];
}
解析器完成(在AppDelegate中)
- (void)parserDidEndDocument:(NSXMLParser *)parser
{
// parser is finished, we can now kill the network activity icon on root view controller
RootViewController * root = [[RootViewController alloc] init];
[root killDownloadIcon];
[root performSelectorOnMainThread:@selector(unhideShowtimesButton) withObject:nil waitUntilDone:NO];
[root release];
}
我的unhideShowtimesButton on(在RootViewController中)
-(void)unhideShowtimesButton {
showtimesButton.hidden = FALSE;
}
我正在使用unhideShowtimesButton(通过断点验证),但它只是完全忽略了hidden = False。
答案 0 :(得分:2)
您正在每个函数中创建一个新的RootViewController实例。这看起来不错。您应该在整个代码中只使用一个实例。我的直觉是,由于RootViewController实例不同,您尝试隐藏的showTimesButton实例与正在显示的实例不同。