如何在网站上制作标签加载内容?

时间:2013-04-16 17:56:11

标签: iphone cocoa-touch label

我想制作一个标签,表明一个乐队是否正在巡演(System of a down fyi)

所以我希望界面中的标签可以调整到我服务器上给出的值。 (因此需要从(.html)文件中提取数据并将其显示为标签。)

WebViews在我看来很混乱,标签看起来更好。

1 个答案:

答案 0 :(得分:2)

我建议使用AFNetworking - http://afnetworking.com/。它允许您从服务器中提取数据。

例如,您可以创建包含所需数据的XML文件。然后,您可以使用NSXMLParser对其进行解析,并根据数据执行任何操作。

实施例

NSURL *feedURL = [[NSURL alloc] initWithString:@"http://yourserver.com/yourxmlfile.xml"];
NSURLRequest *feedRequest = [[NSURLRequest alloc] initWithURL:feedURL];
AFXMLRequestOperation *feedOperation = [AFXMLRequestOperation XMLParserRequestOperationWithRequest:feedRequest success:^(NSURLRequest *request, NSHTTPURLResponse *response, NSXMLParser *XMLParser) {
    NSLog(@"XMLRequest successful - starting parser..");
    [XMLParser setDelegate:self];
    [XMLParser parse];
} failure:^(NSURLRequest *request, NSHTTPURLResponse *response, NSError *error, NSXMLParser *XMLParser) {
    UIAlertView *connectionError = [[UIAlertView alloc] initWithTitle:@"Connection Error" message:error.localizedDescription delegate:nil cancelButtonTitle:@"Dismiss" otherButtonTitles:nil, nil];
    [connectionError show];
}];

XML示例:

这是您要上传到服务器的文件。我在yourxmlfile.xml中使用了标题AFXMLRequestOperation,但无论你想要什么,都可以使用它。

<?xml version="1.0"?>
<band>
    <bandname>The Band</bandname>
    <bandontour>1</bandontour>
</band>

使用NSXMLParser(委托)

创建一个ivar(在你的.h中)来保存解析后的数据。

@property (nonatomic, retain) NSString *currentProperty;

这将暂时保存元素数据,然后当解析器到达didEndElement时,您需要对其执行某些操作。

- (void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName attributes:(NSDictionary *)attributeDict {    
    if ([elementName isEqualToString:@"bandontour"]) {
        // found the <bandontour> tag
    }    
}

- (void)parser:(NSXMLParser *)parser foundCharacters:(NSString *)string {
    self.currentProperty = string;
}

- (void)parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName {
    if ([elementName isEqualToString:@"bandontour"]) {
        // finished getting the data in <bandontour>

        // do something now that you've got your data retrieved
        if (self.currentProperty) int bandOnTour = self.currentProperty.intValue;
        if (bandOnTour == 1) self.yourLabel.text = @"Band is on tour!";
        else self.yourLabel.text = @"Not on tour.";
    }  
}

有关详细信息,请参阅NSXMLParser class reference