일부 XML 데이터를 사전에 저장하려고하지만 XMLParser의 메소드를 실행할 때 어떤 이유로 설정하려고하는 배열 및 사전 데이터가 설정되지 않습니다. XML 데이터가 거기에 있으며, 그것을 로그 할 수 있으며 elementName과 stringValues를 볼 수는 있지만 배열이나 사전에 연결할 수는 없습니다. 내가 뭘 잘못하고 있는지 모르겠다. 이미 구문 분석 된 XML 파일 후 사전 및 키를 초기화하고Cocoa : XML 구문 분석
#import "AppController.h"
@implementation AppController
- (void) awakeFromNib {
//set up our speech synth
synth = [[NSSpeechSynthesizer alloc] init];
//go and grab the weather data
urlToPass = [[NSURL alloc] initWithString:@"http://www.weather.gov/xml/current_obs/KPTW.xml"];
NSData *data = [NSData dataWithContentsOfURL: urlToPass];
NSString *weatherData = [[NSString alloc] initWithData:data encoding:NSMacOSRomanStringEncoding];
[self parseXMLFile:urlToPass];
//NSLog(weatherData);
dataDict = [[NSMutableDictionary alloc] init];
dataKeys = [[NSMutableArray alloc] init];
[dataKeys addObject:@"test line"];
currentKey = [[NSString alloc] init];
[dataDict, dataKeys release];
}
- (void) parseXMLFile : (NSURL *) url {
BOOL success;
if (dataParser) // addressParser is an NSXMLParser instance variable
[dataParser release];
dataParser = [[NSXMLParser alloc] initWithContentsOfURL:url];
[dataParser setDelegate:self];
[dataParser setShouldResolveExternalEntities:YES];
success = [dataParser parse]; // return value not used
// if not successful, delegate is informed of error
}
- (void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName attributes:(NSDictionary *)attributeDict{
currentKey = nil;
[currentStringValue release];
currentStringValue = nil;
currentKey = [NSString stringWithFormat: @"%@", elementName];
return;
}
- (void)parser:(NSXMLParser *)parser foundCharacters:(NSString *)string {
if(!currentStringValue){
currentStringValue = [[NSMutableString alloc] init];
}
[currentStringValue appendString:string];
}
- (void)parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName {
[dataKeys addObject:currentKey];
[dataDict setObject:currentStringValue forKey:currentKey];
[dataKeys addObject:@"test"];
[self speakJasper];
}
- (void) speakJasper {
//set up a string for what jasper will say
NSMutableString* speakString = [[NSMutableString alloc] init];
speakString = @"Good morning, the current weather is";
//start looping through the dataKeys array to get the dataDict keys, take that value and add to speak string
for(int d=0; d<dataKeys.count; d++) {
NSString* thisDataKey = [dataKeys objectAtIndex:d];
if (thisDataKey == @"weather") {
NSString* thisDataValue = [dataDict objectForKey:thisDataKey];
[speakString appendString:thisDataValue];
}
}
NSLog(@"%i", dataKeys.count);
//[synth startSpeakingString:speakString];
}
@end
"내가 뭘 잘못하고 있는지 잘 모르겠다"는 질문이 아닙니다. 다른 사람이 코드를 빗나가게하려면 http://codereview.stackexchange.com/에서 확인하십시오. –