Проблемы с XML-парсером для iOS - PullRequest
0 голосов
/ 06 марта 2011

Привет, ребята (и девочки), в настоящее время я работаю над относительно простым приложением для iPhone, которое извлекает записи из базы данных.

Я пытаюсь использовать NSXMLParser для этого, но по какой-то причине,после достижения 10-го элемента все приложение просто решает подняться и выйти.Я не совсем уверен, почему это происходит.Журнал не выдает никаких ошибок.Он просто останавливается.

Я включил полученные нами didStartElement и didEndElements.

didStartelement

- (void)parser:(NSXMLParser *)parser didStartElement:(NSMutableString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName attributes:(NSDictionary *)attributeDict {
//NSLog(@"elementName = %@", elementName);
txt = [[NSMutableArray alloc] init];
//curElem = elementName;
//currentRestaurant = [[Restaurant alloc] init];


if ( [elementName isEqualToString:@"Name"]){
    curElem = elementName;
    currentRestaurant = [[Restaurant alloc] init];

    return;
}

else {
    curElem = nil;
}

и didEndElement

- (void)parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName {
//if( [elementName isEqualToString:@"Name"] ) {
    // Do something here
    //NSLog(@"TXT: %@", txt);

    if([elementName isEqualToString:@"RestID"]){
        currentRestaurant.RestID = [txt integerValue];
        NSLog(@"RestID: %@", currentRestaurant.RestID);

    }

    if ([elementName isEqualToString:@"Name"]) {
        currentRestaurant.Name = txt;
        NSLog(@"Name: %@", currentRestaurant.Name);
    }

    else if([elementName isEqualToString:@"Address"]){
        currentRestaurant.Address = txt;
        NSLog(@"Address: %@", currentRestaurant.Address);

    }
    else if([elementName isEqualToString:@"Phone"]){
        currentRestaurant.Phone = txt;
        NSLog(@"Phone: %@", currentRestaurant.Phone);

    }
    else if([elementName isEqualToString:@"NumNoms"]){
        currentRestaurant.NumNoms = [txt integerValue];
        NSLog(@"NumNoms: %@", currentRestaurant.NumNoms);

    }
    else if([elementName isEqualToString:@"PriceID"]){
        currentRestaurant.PriceID = [txt integerValue];
        NSLog(@"PriceID: %@", [NSString stringWithFormat:@"%d", currentRestaurant.PriceID]);

    }
    else if([elementName isEqualToString:@"OpenTime"]){
        currentRestaurant.OpenTime = txt;
        NSLog(@"OpenTime: %@", currentRestaurant.OpenTime);

    }
    else if([elementName isEqualToString:@"CloseTime"]){
        currentRestaurant.CloseTime = txt;
        NSLog(@"CloseTime: %@", currentRestaurant.CloseTime);

    }
    else if([elementName isEqualToString:@"TypeID"]){
        currentRestaurant.OpenTime = txt;
        NSLog(@"TypeID: %@", currentRestaurant.TypeID);

    }
    else if([elementName isEqualToString:@"imgURL"]){
        currentRestaurant.imgURL = txt;
        NSLog(@"imgURL: %@", currentRestaurant.imgURL);

    }
    else if([elementName isEqualToString:@"Coupons"]){
        //currentRestaurant.Coupons = txt;
        //NSLog(@"Coupons: %@", currentRestaurant.Coupons);


    }
    else if([elementName isEqualToString:@"Specials"]){
        currentRestaurant.Specials = [NSString stringWithFormat:@"%d", [txt integerValue]];
        NSLog(@"Specials: %@", currentRestaurant.Specials);

    }
    else if([elementName isEqualToString:@"Flagged"]){
        currentRestaurant.Flagged = [NSString stringWithFormat:@"%d", [txt integerValue]];
        NSLog(@"Flagged: %@", currentRestaurant.Flagged);

    }
    else if([elementName isEqualToString:@"timesFlagged"]){
        currentRestaurant.timesFlagged = [txt integerValue];
        NSLog(@"timesFlagged: %@", currentRestaurant.timesFlagged);

    }
    else if([elementName isEqualToString:@"Delivery"]){
        currentRestaurant.Delivery = [NSString stringWithFormat:@"%d", [txt integerValue]];
        NSLog(@"Delivery: %@", currentRestaurant.Delivery);

    }
    else if([elementName isEqualToString:@"TigerBucks"]){
        currentRestaurant.TigerBucks = [NSString stringWithFormat:@"%d", [txt integerValue]];
        NSLog(@"TigerBucks: %@", currentRestaurant.TigerBucks);
        [xmlData addObject:currentRestaurant];
        [currentRestaurant dealloc];
    }


    //NSLog(@"Current Rest name: %@", currentRestaurant.Name);
    //[xmlData addObject:currentRestaurant];
    for (id obj in xmlData)
        NSLog(@"A record in xmlData: %@", obj);
    [objArray addObject:txt];
    //NSLog(@"objArray: %@", [objArray count]);
    //NSLog(@"xmlData: %@", [xmlData count]);
    [txt release];

    return;
//}
[txt release];
txt = nil;
//NSLog(@"objArray: %@", [objArray count]);
//NSLog(@"xmlData: %@", [xmlData count]);

}

Опять же, любой совет будет очень признателен.

1 Ответ

0 голосов
/ 06 марта 2011

Я бы порекомендовал использовать TouchXML .

Он очень прост в использовании и не вызывает у меня никаких проблем.

...