Как добавить значение широты и долготы нубера по точкам в массиве? - PullRequest
0 голосов
/ 24 августа 2011

Я использую Google direction AP для вычисления широты и долготы, когда пользователь задает адрес отправления и назначения. В этом API я также получаю широту и долготу числа средних точек. Я все храню в массиве.Теперь я хочу добавить значение широты и долготы каждой точки в новом массиве.Как хранить значение их в массиве?когда получаю данные из парсера xml, тогда я использую этот код

- (void)parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName{
if (qName)
{
    elementName = qName;
}

else if ([elementName isEqualToString:@"start_location"])
{
    isFoundStartLoc = NO;
}           
else if ([elementName isEqualToString:@"end_location"])
{
    isFoundEndLoc = NO;
}               
else if ([elementName isEqualToString:@"lat"])
{
    if (isFoundStep)
    {
        if (isFoundStartLoc)
        {
            stepObject.startLocLat = [self.currentElement doubleValue];
        }
        else if(isFoundEndLoc)
        {
            stepObject.endLocLat = [self.currentElement doubleValue];
        }
    }
    else{
        if (isFoundStartLoc)
        {
            slegObject.startLocLat = [self.currentElement doubleValue];
        }
        else if(isFoundEndLoc)
        {
            slegObject.endLocLat = [self.currentElement doubleValue];
        }
    }
}           
else if ([elementName isEqualToString:@"lng"])
{
    if (isFoundStep) 
    {
        if (isFoundStartLoc)
        {
            stepObject.startLocLong = [self.currentElement doubleValue];
        }
        else if(isFoundEndLoc)
        {
            stepObject.endLocLong = [self.currentElement doubleValue];
        }
    }
    else{
        if (isFoundStartLoc)
    {
        slegObject.startLocLong = [self.currentElement doubleValue];
    }
    else if(isFoundEndLoc)
    {
        slegObject.endLocLong = [self.currentElement doubleValue];
    }
        }
}               
else if ([elementName isEqualToString:@"distance"])
{
    isFoundDistance = NO;
}   
else if ([elementName isEqualToString:@"text"])
{
    if (isFoundStep)
    {
        if (isFoundDistance){
                stepObject.distance=[self.currentElement doubleValue];
            }
    }
    else
    {
        if(isFoundDistance)
        {
            slegObject.total_distance=[self.currentElement doubleValue];
        }
    }
}
else if ([elementName isEqualToString:@"step"])
{
    if (ListofSteps1==nil)
    {
        ListofSteps1=[[NSMutableArray alloc]init];
    }
    [ListofSteps1 addObject:stepObject];
    [stepObject release];
    stepObject=nil;
    isFoundStep=NO;
}

else if ([elementName isEqualToString:@"leg"])
{
    if (listofPoint==nil)
    {
        listofPoint=[[NSMutableArray alloc]init];
    }
    [listofPoint addObject:slegObject];
    [slegObject release];
    slegObject=nil;
}

} в этом коде у меня есть два массива в списке listofPoint для хранения только широты и долготы исходных точек плохого назначения.И еще один ListofSteps1 для хранения широты и долготы средних точек источника и назначения.Теперь я хочу добавить все широты и долготы в одном массиве.Так как хранить в одном массиве?

1 Ответ

0 голосов
/ 24 августа 2011

Если вы хотите сохранить обе точки в одном массиве, есть несколько возможностей:

  1. создать новый класс, содержащий две точки как один элемент, и добавить экземпляр такогокласс (наиболее вероятный самый чистый способ)

  2. Если вы знаете, что всегда сохраняете две точки для каждой записи, вы можете просто добавить их и получить доступ к паре nTh с помощью arrayIndex = n*2; [myArray objectAtIndex: n] and [myArray objectAtIndex: n+1]

3 Вы также можете создать новый класс, содержащий 1 точку и атрибут, какой это тип точки.Но тогда вам нужно всегда обходить список с самого начала (я не уверен, что это именно то, что вам нужно в вашем случае)

ps вы освобождаете свой slegObject.Я не вижу, что вы делаете alloc / init для этого.

Ваша проблема скорее связана с управлением памятью?

...