Не удается получить данные NSXMLParser в текстовое поле, пункт меню или метку - PullRequest
1 голос
/ 15 февраля 2012

Я использую приведенный ниже код для разбора онлайн-файла XML. Когда я запускаю приложение, мои текстовые поля пусты. Как извлечь строки из NSXMLParser и поместить их в IBOutlets, такие как текстовые поля, пункты меню или метки?

файл интерфейса:

#import <Foundation/Foundation.h>

@interface XMLCurrent : NSObject <NSXMLParserDelegate> {
    IBOutlet NSTextField *location;
    IBOutlet NSTextField *condition;
    IBOutlet NSTextField *degreesF;

    NSMutableString *xmlLocation;
    NSMutableString *xmlWeather;
    NSMutableString *xmlTempF;
}

- (void)fetchCurrentWeather:(id)sender;

@end

файл реализации:

#import "XMLCurrent.h"

@implementation XMLCurrent

- (void)fetchCurrentWeather:(id)sender {

    NSURL *xmlURL = [NSURL URLWithString:@"http://www.weather.gov/xml/current_obs/KCLT.xml"];

    NSXMLParser *parser = [[NSXMLParser alloc] initWithContentsOfURL:xmlURL];
    [parser setDelegate:self];
    [parser parse];
}

- (void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName attributes:(NSDictionary *)attributeDict {

    if ([elementName isEqual:@"location"]) {
        xmlLocation = [[NSMutableString alloc] init];
    }

    if ([elementName isEqual:@"weather"]) {
        xmlWeather = [[NSMutableString alloc] init];
    }

    if ([elementName isEqual:@"temp_f"]) {
        xmlTempF = [[NSMutableString alloc] init];
    }
}

- (void)parser:(NSXMLParser *)parser foundCharacters:(NSString *)string {

    [xmlLocation appendString:string];
    [xmlWeather appendString:string];
    [xmlTempF appendString:string];
}

- (void)parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName {

    if ([elementName isEqual:@"location"]) {
        [location setStringValue:xmlLocation];
    }

    if ([elementName isEqual:@"weather"]) {
        [condition setStringValue:xmlWeather];
    }

    if ([elementName isEqual:@"temp_f"]) {
        [degreesF setStringValue:xmlTempF];
    }
}

@end

1 Ответ

0 голосов
/ 15 февраля 2012

Я думаю, что может быть две причины вашей проблемы:

  1. Вы анализируете XML до вызова viewDidLoad, и поэтому все ваши выходы равны nil

  2. Вы не подключили их в Интерфейсном Разработчике.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...