我使用NSXMLParser從聯機XML文件中獲取信息。我的目標是讓一個類執行XML解析,另一個類執行變量。下面是我的項目代碼:使用NSXMLParser設置NSString變量
Current.h & Current.m
#import <Foundation/Foundation.h>
@interface Current : NSObject {
NSString *curTempF;
IBOutlet NSTextField *textField;
}
@property (nonatomic, copy) NSString *curTempF;
- (void)displayOutlets:(id)sender;
@end
和
#import "Current.h"
@implementation Current
@synthesize curTempF;
- (void)awakeFromNib {
[self displayOutlets:self];
}
- (void)displayOutlets:(id)sender {
[textField setStringValue:curTempF];
}
@end
XmlParser.h & XmlParser.m
#import <Foundation/Foundation.h>
@interface XmlParser : NSObject <NSXMLParserDelegate> {
NSString *urlString;
NSURL *url;
NSMutableString *xmlString;
}
- (IBAction)fetchXML:(id)sender;
@end
和
#import "XmlParser.h"
#import "Current.h"
@implementation XmlParser
- (void)awakeFromNib {
[self fetchXML:self];
}
- (IBAction)fetchXML:(id)sender {
urlString = @"http://api.wunderground.com/api/***/conditions/q/28173.xml";
url = [NSURL URLWithString:urlString];
NSXMLParser *parser = [[NSXMLParser alloc] initWithContentsOfURL:url];
[parser setDelegate:self];
[parser parse];
}
- (void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName attributes:(NSDictionary *)attributeDict {
if ([elementName isEqual:@"temp_f"]) {
xmlString = [[NSMutableString alloc] init];
}
}
- (void)parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName {
if ([elementName isEqual:@"temp_f"]) {
Current *cTempF = [[Current alloc] init];
[cTempF setCurTempF:xmlString];
}
}
- (void)parser:(NSXMLParser *)parser foundCharacters:(NSString *)string {
[xmlString appendString:string];
}
@end
當我跑我收到有關錯誤節目「無效的參數並不令人滿意:ASTRING」。它看起來像IBOutlet的setStringValue不起作用。有什麼建議麼?
嗯,我試了兩種方法,但都沒有奏效。項目運行時我沒有收到任何錯誤,但IBOutlet沒有使用字符串值進行更新。 – wigging 2012-04-26 22:17:14
當前類如何連接到您的視圖?在界面生成器中,您是否有一個視圖上有一個Current?我問的原因是你需要專門更新視圖上的Current。簡單地做Current * cTempF = [[Current alloc] init];如果Current的這個實例不在視圖上,它將不會執行任何操作。 – 2012-04-26 22:21:52
我像往常一樣設置了IBOutlet。在IB中,我將它的類設置爲「當前」,並將插座連接到窗口中的「標籤」。 – wigging 2012-04-26 22:51:05