代码之家  ›  专栏  ›  技术社区  ›  conorgriffin

如何在nsxmlparser运行时禁用按钮,然后在完成时启用它?

  •  0
  • conorgriffin  · 技术社区  · 15 年前

    我有一个 viewController 哪些进口 XMLParser.h 作为班级 xmlParser

    我路过一个 NSURL 我的对象 可视控制器 XML分析器 类与 getXML 方法如下

    goButton 我按的按钮是呼叫 获取XML 方法如下。我禁用了我点击触发的按钮 获取XML 方法,但我不确定在XML解析器完成对返回的XML的解析后,将代码放在何处再次启用它。

    - (IBAction) getXML {
        goButton.enabled = NO;
    
        // allocate and initialize the xmlParser 
        xmlParser = [[XMLParser alloc] init];
    
    // then generate the URL we are going to pass to it and call the fetchXML method passing the URL.
        NSURL *xmlurl = [[NSURL alloc] initWithString:@"http://www.mysite.com/myfile.xml"];
        [xmlParser fetchXMLFromURL:xmlurl];
    
        // release objects
        [xmlurl release];
        [xmlParser release];
    
    }
    

    根据@squegy的建议,我修改了我的代码。

    - (IBAction) getXML {
        goButton.enabled = NO;
    
        xmlParser = [[XMLParser alloc] init];
    
        [self performSelectorInBackground:@selector(parseInBackground:) withObject:xmlParser];
    
    }
    
    - (void)parseInBackground:(XMLParser*)parser {
        NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
    
        NSURL *xmlurl = [[NSURL alloc] initWithString:@"http://www.mysite.com/myfile.xml"];
    
        [parser fetchXMLFromURL:xmlurl];
        [self performSelectorOnMainThread:@selector(didFinishXMLParsing:) withObject:parser];
    
        [xmlurl release];
        [pool drain];
    
    }
    
    - (void)didFinishXMLParsing:(NSXMLParser*)parser {
        goButton.enabled = YES;
    }
    

    在到达生产线之前看起来一直在工作

    [self performSelectorOnMainThread:@selector(didFinishXMLParsing:) withObject:parser];
    

    编译器的投诉如下:

    2010-02-17 00:22:20.574 XMLApp[2443:521b] *** -[viewController performSelectorOnMainThread:withObject:]: unrecognized selector sent to instance 0x1285a0
    2010-02-17 00:22:20.578 XMLApp[2443:521b] *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '*** -[viewController performSelectorOnMainThread:withObject:]: unrecognized selector sent to instance 0x1285a0'
    2010-02-17 00:22:20.583 XMLApp[2443:521b] Stack: (
        861696817,
        860329709,
        861700631,
        861203093,
        861166272,
        18715,
        846004025,
        845672609,
        848189713
    )
    
    2 回复  |  直到 15 年前
        1
  •  1
  •   Alex Wayne    15 年前
    - (IBAction)getXML {
        goButton.enabled = NO;
    
        xmlParser = [[XMLParser alloc] init];
        NSURL *xmlurl = [[NSURL alloc] initWithString:@"http://www.mysite.com/myfile.xml"];
        [xmlParser fetchXMLFromURL:xmlurl];
    
        [self performSelectorInBackground:@selector(parseInBackground) withObject:xmlParser];
    
        [xmlurl release];
        [xmlParser release];
    }
    
    - (void)parseInBackground:(NSXMLParser*)parser {
        NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
    
        [parser parse];
        [self performSelectorOnMainThread:@selector(didFinishXMLParsing:)
                               withObject:parser
                            waitUntilDone:NO];
    
        [pool drain];
    }
    
    - (void)didFinishXMLParsing:(NSXMLParser*)parser {
        goButton.enabled = YES;
    }
    

        2
  •  -1
  •   pgb    15 年前

    - (void)parserDidEndDocument:(NSXMLParser *)parser

    performSelectorInMainThread