0

この質問は頻繁に聞かれるかもしれませんが、私はそれらのほとんどすべてを読みましたが、私の場合の解決策を見つけることができませんでした. 解析したデータを NSMutableDictionary に保存する予定です。パーサーは問題なく動作し、ログを取得すると、解析されたすべてのデータが表示されます。問題は、最後のアイテムが NSDictionary にのみ保存されることです。辞書を間違った方法で配置したと推測できますが、保存するためのより良い解決策がわかりません。要素の名前とテキストを保持するために辞書を使用します。ここに私のコードがあります:

@implementation Parser
@synthesize currentElementPointer, rootElement;

@synthesize dictionary;

-(id)initParser
{
    if(self = [super init]) {
        tvc = (TimeTableViewController*)[[UIApplication sharedApplication]delegate];

        APUAppDelegate *appDelegate = [[UIApplication sharedApplication]delegate];
        context = [appDelegate managedObjectContext];

        [self deleteAllObjects:@"TimeTable"];
    }
    return self;
}


#pragma mark -
#pragma mark PARSER

-(void)parserDidStartDocument:(NSXMLParser *)parser
{
    self.parsing = YES;
}

-(void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName attributes:(NSDictionary *)attributeDict
{
    if([elementName isEqualToString:@"intake"])
    {
        NSString *name = attributeDict[@"name"];
        self.parsing = [name isEqualToString:[self sendIntakeToParser]];
    }
    if(![self isParsing]) return;

    if(self.rootElement == nil) {
        self.rootElement = [[List alloc]init];
        self.currentElementPointer = self.rootElement;
    } else {
        List *newList = [[List alloc]init];
        newList.parent = self.currentElementPointer;
        [self.currentElementPointer.subElements addObject:newList];
        self.currentElementPointer = newList;
    }

    self.currentElementPointer.name = elementName;
    self.currentElementPointer.attributes = attributeDict;

}

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

    if(![self isParsing]) return;

    if([self.currentElementPointer.text length] > 0) {
        self.currentElementPointer.text = [self.currentElementPointer.text stringByAppendingString:string];
    } else {
        self.currentElementPointer.text = string;
    }


    dictionary = [[NSMutableDictionary alloc]init];
    [dictionary setObject:[self.currentElementPointer text] forKey:[self.currentElementPointer name]];

}


-(void)parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName
{
    if([self isParsing])
    {
        self.currentElementPointer = self.currentElementPointer.parent;
    } else if ([elementName isEqualToString:@"intake"])
    {
        self.parsing = YES;
    }
}

これは私のxml構造です: ここに画像の説明を入力

4

1 に答える 1