Я использую следующий код для анализа XML-файла в Интернете. Когда я запускаю приложение, мои текстовые поля пусты. Как извлечь строки из NSXMLParser и поместить их в IBOutlets, такие как текстовые поля, элементы меню или метки?Невозможно получить данные NSXMLParser в текстовое поле, пункт меню или метку
интерфейс файла: файл
#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
Ваш код выглядит правильно, вы уверены, что ваши 'IBOutlet' правильно подключены? – dasblinkenlight
Вы пытались остановиться в отладчике, чтобы увидеть, что выходы не ноль? – dasblinkenlight
Создайте свою программу для запуска в симуляторе, установите точку останова на строке, которая говорит 'if ([elementName isEqual: @" location "])', щелкнув по вертикальной панели слева от текстового пространства вашего редактора и запустив точки останова включены. Как только ваша точка останова будет удалена, наведите курсор на переменную 'location', чтобы увидеть ее значение. – dasblinkenlight